创建一个新的分支指针

1
$ git branch testing

这会在当前 commit 对象上新建一个分支指针。

那么,Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。请注意它和你熟知的许多其他版本控制系统(比如 Subversion 或 CVS)里的 HEAD 概念大不相同。在 Git 中,它是一个指向你正在工作中的本地分支的指针 (译注:将 HEAD 想象为当前分支的别名。)。运行 git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,所以在这个例子中,我们依然还在 master 分支里工作。

创建并切换到到一个名为"hotfix"的分支:

1
$ git checkout -b hotfix

这相当于执行下面这两条命令:

1
2
$ git branch hotfix
$ git checkout hotfix

切换分支

要切换到其他分支,可以执行 git checkout 命令。我们现在转换到新建的 testing 分支:

1
$ git checkout testing

这样 HEAD 就指向了 testing 分支。

合并分支

git merge 命令来进行合并:

1
2
$ git checkout master
$ git merge hotfix

删除分支

使用 git branch 的 -d 选项执行删除操作:

1
$ git branch -d hotfix

遇到冲突时的分支合并

任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。

解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决。如果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool ,它会调用一个可视化的合并工具并引导你解决所有冲突。

退出合并工具以后,Git 会询问你合并是否成功。如果回答是,它会为你把相关文件暂存起来,以表明状态为已解决。之后可以再运行一次 git status 来确认所有冲突都已解决。如果觉得满意了,并且确认所有冲突都已解决,也就是进入了暂存区,就可以用 git commit 来完成这次合并提交。

分支的管理

查看分支清单

1
2
3
4
$ git branch
iss53
* master
testing

注意看 master 分支前的 * 字符:它表示当前所在的分支。也就是说,如果现在提交更新,master 分支将随着开发进度前移。若要查看各个分支最后一个提交对象的信息,运行 git branch -v :

1
$ git branch -v

要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 --merge--no-merged 选项(Git 1.5.6 以上版本)。