1 | $ git branch testing |
这会在当前 commit 对象上新建一个分支指针。
那么,Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。请注意它和你熟知的许多其他版本控制系统(比如 Subversion 或 CVS)里的 HEAD 概念大不相同。在 Git 中,它是一个指向你正在工作中的本地分支的指针 (译注:将 HEAD 想象为当前分支的别名。)。运行 git branch
命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,所以在这个例子中,我们依然还在 master 分支里工作。
创建并切换到到一个名为"hotfix"的分支:
1 | $ git checkout -b hotfix |
这相当于执行下面这两条命令:
1 | $ git branch hotfix |
要切换到其他分支,可以执行 git checkout
命令。我们现在转换到新建的 testing 分支:
1 | $ git checkout testing |
这样 HEAD 就指向了 testing 分支。
用 git merge
命令来进行合并:
1 | $ git checkout master |
使用 git branch
的 -d 选项执行删除操作:
1 | $ git branch -d hotfix |
任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。
解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决。如果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool
,它会调用一个可视化的合并工具并引导你解决所有冲突。
退出合并工具以后,Git 会询问你合并是否成功。如果回答是,它会为你把相关文件暂存起来,以表明状态为已解决。之后可以再运行一次 git status
来确认所有冲突都已解决。如果觉得满意了,并且确认所有冲突都已解决,也就是进入了暂存区,就可以用 git commit
来完成这次合并提交。
1 | $ git branch |
注意看 master 分支前的 * 字符:它表示当前所在的分支。也就是说,如果现在提交更新,master 分支将随着开发进度前移。若要查看各个分支最后一个提交对象的信息,运行 git branch -v
:
1 | $ git branch -v |
要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 --merge
和 --no-merged
选项(Git 1.5.6 以上版本)。