分支的掌握和理解到位对于我们工作中的并行开发十分重要,今天我们一起来研究它。
一,两人在一个分支上开发
程序员小王入职,拉取了仓库的代码,开发新需求。
git clone https://github.com/*****/gitunion.git
查看小王当前所所在的分支
git branch
可以看出当前只有master一个分支。此时通过git的图形工具查看分支指针的位置。
gitk
可以看出当前分支指针指向master。此时小王开发了部分需求并进行了提交。
git push origin master
提交后我们再来看下分支指针的位置:
可以看出分支指针向前移动了一个节点。这里我们可以得出结论:
分支指针总是随着提交而移动并且指向最新的那次提交。
此时小张入职,和小王一起在同一个分支开发。小张克隆仓库,拉取代码,并且在本地进行了一次提交。
git clone https://github.com/*****/gitunion.git
git add Hello.java
git commit -m 'xiaozhang first commit'
此时观察小张的分支指针,可以看到小张的分支指针指向了他的最新提交。
此时小王还在继续开发,并且在他的本地进行了第二次提交
此时小王的分支指针显示如下:
此时我们可以得出结论:在各自的版本库上,分支指针的移动对于其他人员是透明的。
这时候项目完工,双方都提交了代码到远程仓库上。
此时观察分支的指针图:
可以发现,提交后,远程仓库的分支指针指向了两个人提交的合并。由此我们可以得出结论:在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的最新状态。
二,两人在不同分支上开发
此时小张接了新的需求,和小王的需求不一样。于是小李决定在最新的代码基础上拉一个新分支。
在现有的master分支上创建slave分支:
git branch slave master
查看当前所有分支:
git branch
可以看到新的分支已经建立,不过此时分支指针还是指向master。现在切换分支:
git checkout slave
可以看到分支已经切换
并且可以发现两个分支都指向最新的提交,说明两个分支的代码相同并且是最新的。
此时小张开发了一部分并提交了修改到本地版本库
git add Person.java
git commit -m 'xiaozhang first commit on slave'
观察小张的分支指针指向,此时分支指针指向了slave分支的最新提交
此时小王依然在开发他之前的需求,并且提交了一次最新的修改到本地版本库
git add Teacher.java
git commit -m 'xiaowang third commit'
我们观察小王的分支指针指向
可以看到小王的master指针指向了小王的第三次提交。因为小张新建的分支在他本地,所以小王此处看不到小张的slave分支。
此时人都提交了本地的版本库到远程仓库
小王:
git push origin master
小张
git push origin slave
小张新拉的分支已提交到版本库。
此时我们观察小王的分支指针指向:
小王的远程和本地master都指向了最新的修改。
我们观察小张的分支指向:
小张的远程和本地slave分支都指向了最新的修改。
由于在两个不同的分支上开发,我们发现他们并没有进行分支合并。
于是我们得出结论:两个分支开发提交后不会进行自动合并。
三,分支切换
此时小张继续提交了最新的修改
git add Student.java
git commit -m 'xiaozhang second commit on slave'
观察小张的分支指针可以发现是继续向前移动的。
此时由于小张的项目紧急度高,小王切换到了小张的分支上开发。
拉取小张的分支:
git pull origin slave
可以看到小王的工作空间中多了小张的修改。这里可以看出:不同的分支存放在同一个工作区中。
小王切换分支(注意:当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分支):
git checkout slave
观察小王的分支指向:
可以看出分支切换后指向了小张的最新的提交。于是可以得出结论:分支的切换,分支指针总是指向最新的提交。
到这里。我们对分支的研究已经基本差不多了。相信大家能够看明白,小编写的比较详详细和基础。
总结:
1.分支指针总是随着提交而移动并且指向最新的那次提交。
2.在各自的版本库上,分支指针的移动对于其他人员是透明的。
3.在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的 最新状态。
4.当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分 支.
5.两个分支开发提交后不会进行自动合并。
6.不同的分支存放在同一个工作区中。
7.分支的切换,分支指针总是指向最新的提交。
欲穷千里目,更上一层楼!祝大家事业有成!