git branch 分支名 复制代码

通过git branch 命令就可以快速创建一个本地分支,这个分支会基于当前提交对象创建一个指针。而这个命令只会创建一个分支,并不会自动切换到新分支中,本例中我们是处于master分支中。

新成员如何新建自己的分支(创建一个本地分支)(1)

HEAD相当于一个标识,用来指向当前所在的分支

分支切换

要想切换分支,就需要使用gIt checkout命令

//切换分支 % git checkout testing //查看分支 % git branch -a master * testing 复制代码

此时HEAD就指向testing分支了

新成员如何新建自己的分支(创建一个本地分支)(2)

当我们针对master分支和testing分支分别做修改,看看分支份分叉会变成什么样

新成员如何新建自己的分支(创建一个本地分支)(3)

可以看到两个分支从一开始的位置走上了不同的道路

合并分支

假如testing分支是你同事的分支,现在需要合到master分支然后push到远程分支,那就需要使用merge命令进行合并

% git merge testing 复制代码

此命令会将testing分支合并到当前分支中,我目前的分支是master,合并后两个分支的代码就到一起了,后续就可以基于master进行push或者继续提交代码。

合并后如果你不想要testing分支,可以将该分支进行删除

删除分支

git branch -d testing 复制代码

分支冲突时如何合并

假如你有两个分支都对同一个文件进行了修改,当你将其中一个分支合并到另一个分支就会出现冲突

% git merge testing Auto-merging test.md CONFLICT (content): Merge conflict in test.md 复制代码

因为testing分支和master分支都对test.md文件做了修改,当将testing分支合并到master分支时就会出现冲突

任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,看起来像下面这个样子:

sssssTEST <<<<<<< HEAD ssss ssssssssasasa ======= ​ sss ssssss >>>>>>> testing ​ 复制代码

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

sssssTEST ssss ssssssssasasa ssssss 复制代码

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

分支的管理

查看所有分支

% git branch * master test ​ 复制代码

会显示出所有分支,*号代表现在检出的那一个分支(也就是说,当前 HEAD 指针所指向的分支)。

查看每一个分支最后提交

% git branch -v * master bc5b518 [ahead 5] sss test 1be830c ss 复制代码

查看所有本地分支对应跟踪的远程分支

% git branch -vv master d230c50 [origin/master: ahead 6] ss * test 1be830c ss 复制代码

此时可以看到,master对应的远程分支是origin/master,test还没有和远程分支建立关联

设置已有的本地分支跟踪一个远程分支

% git branch -u origin/master ​ % git branch -vv master d230c50 [origin/master: ahead 6] ss * test 1be830c [origin/master] ss ​ 复制代码

该命令会将当前所使用的本地分支与一个远程分支建立映射关系,当然此命令也可以作为修改对应的远程分支

删除远程分支

% git push origin --delete 远程分支名 复制代码

,