我们平时应用的版本控制软件都支持分支,使用分支可以把我们的工作从主线上分开,避免影响主线。在其他的版本控制中对分支通知是需要创建一个源代码的目录,这种方式对于大工程来讲,效率是相关低下的,而Git的分支则是非常的轻量,创建与切换分支可以在瞬间完成。

分支创建

Git的分支只是指向提交对象的可变指针。默认的分支名称是master,比如我们想创建一个新的test分支,则可以输入:

git branch test

以上只是创建了一个新分支,但不会切换过去,如果我们想切换到新建的分支,则可以输入:

git checkout test

这样我们就切换到test分支了。
如果我们觉得这样得操作二次,有些麻烦,Git也可以通过一次的创建分支且切换过来,则可以输入:

git checkout -b testing

这样就可以创建一个新的testing的分支,且马上切换到testing分支中。
如果我们的远程上也存在一个dev的分支,这个时候我们只想直接远程的分支取下来,同时再基于远程的分支创建一个本地的分支,则可以使用如下命令

git checkout -b fgliu-andy-dev origin/dev

显示效果如下:

这会给你一个用于工作的本地分支,并且起点位于 origin/dev

分支的合并

我们在新的分支中完成后开发测试后,需要提交合并到主线中。举例我们的分支iss123,处理好要合并到master分支中,则可以先切换到master分支,再执行合并,输入代码如下:

git checkout master
git merge iss123

这样我们就完成了合并的操作,同时我们觉得不再需要分支isu123,则可以删除这个分支,输入:

git checkout -d iss123

合并分支时遇到冲突的解决

有时我们在进行不同分支的合并时,并不是全部都成功合并的,有时会出现冲突,遇到冲突时,会出现类似的提示:

git merge iss123
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

这个时候我们可以执行git status来查看那些因为包含冲突而没有合并状态的文件。
打开冲突的文件,可以看到类似的样子如下:

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> iss123:index.html

这表示 HEAD 所指示的版本(也就是你的 master 分支所在的位置,因为你在运行 merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(======= 的上半部分),而 iss123 分支所指示的版本在 ======= 的下半部分。 为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内容。 例如,你可以通过把这段内容换成下面的样子来解决冲突:

<div id="footer">
please contact us at email.support@github.com
</div>

在你解决了所有文件里的冲突之后,对每个文件使用 git add命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。

Comments
Write a Comment