HEAD 先指向当前分支,分支再指向某次提交。建分支、切分支、合并、再删掉,是 Git 里最便宜的操作之一。
建、切、合、删
bash
git switch -c dev
git switch main
git merge dev
git branch -d devgit switch -c dev 等于「创建并切过去」。分支已存在时用 git switch dev。老命令是 git checkout -b / git checkout。
git branch 列出本地分支,当前分支前面有 *。
快进合并(fast-forward)只是把 main 的指针挪到 dev 的提交上,很快,但删掉 dev 之后,历史上几乎看不出曾经分过叉。要留合并记录:
bash
git merge --no-ff -m "merge dev" dev会多一次 merge commit。发布分支合功能分支时,我更愿意用这个。
冲突
两个分支改了同一文件的同一段,git merge 会停住。git status 会标出冲突文件,打开后能看到类似:
text
<<<<<<< HEAD
当前分支的内容
=======
进来的分支的内容
>>>>>>> other改成你要的结果,去掉标记,再 git add、git commit。冲突不是 Git 坏了,是它拒绝替你猜。
手头改到一半,先去修别的
bash
git stash
git stash list
git stash popstash 把工作区和暂存区收起来。pop 倒出来并丢掉这条 stash;想留着再用 git stash apply,完事再 git stash drop。多条 stash 时:
bash
git stash apply stash@{0}修线上问题的常见顺序:stash → 从稳定分支拉修复分支 → 提交 → 合回去 → 删修复分支 → stash pop 接着干。只想把某一次修复拣到当前分支,用 git cherry-pick <commit>。
标签
标签是给某次提交起的名字,常用来标版本:
bash
git tag v1.0.0
git tag v0.9 <commit>
git tag -a v0.1 -m "version 0.1" <commit>
git show v0.1
git push origin v1.0.0
git push origin --tags删本地标签:git tag -d v1.0.0。删远端:git push origin --delete v1.0.0。