分支是从主线工作中分离出来的一部分,以免和主线相互干扰。
当每一次commit时,Git都会创建commit对象,其中不仅包含了各种commit信息,还包括指向该commit的指针。如果是初次commit,则没有父节点;如果是一次正常的commit,则有一个父节点;如果是从多个分支中合并,则有多个父节点。
简单来说,就是由一个commit对象指向另一个commit对象。分支就是指向一个commit对象的指针。Git中默认分支是master
,master始终指向最新的一次commit。
创建分支
创建一个名为test
的分支。创建分支的同时,也创建了一个指向相同commit对象的指针。
git branch test
这条命令仅创建了一个分支,但当前所在分支依旧是master
,而没有切换到新创建的分支上。
Git通过
HEAD
指针判断当前所处分支。
Git使用一文提到了git log
查看日志,它也可以查看分支所指向commit对象。
git log --oneline --decorate
如果仅查看test
分支的日志。
git log test
切换分支
创建分支的时候并不会切换分支。如果要切换到test
分支,使用git checkout
命令。Git 2.23之后的版本可以使用git switch
命令。
git checkout test
你可以在test
分支里继续进行提交。这相当于master
分支中的项目成为了test
分支的旧版本。
当切换分支的时候,工作目录里的文件会变化(如果在这个分支中修改了该文件并且提交)。
如果想在创建分支的同时切换该分支,使用git checkout -b test
命令。Git 2.23之后的版本可以使用git switch -c test
。
合并分支
利用git merge
命令把test
分支合并到master
分支上。
git switch master
git merge test
有时候合并分支会出现冲突,如果你创建了2个分支,并且修改了同一个地方,这时无法合并。git status
可以查看合并状态。Git可以查看冲突文件,打开文件,===
以上部分表示master
分支中的内容,以下部分表示其它分支中的内容。可以直接删除掉这些部分,进行手动合并。
删除分支
当合并分支之后,该分支就可以删除。
git branch -d test
如果需要强行删除分支,则使用-D
选项。
查看分支
git branch
命令可以列出所有分支。分支名前的星号*
表示HEAD
所指的分支。加上-v
选项可以看到每个分支最新的一次提交信息。--merge
和--no-merge
选项分别看到已经合并或者暂未合并的分支。
修改分支名
把test
修改为new-test
。
git branch --move test new-test
尽量不要把名称修改为
master
。