Git分支的创建,切换及分支指针移动的理解

分支的掌握和理解到位对于我们工作中的并行开发十分重要,今天我们一起来研究它。

一,两人在一个分支上开发

程序员小王入职,拉取了仓库的代码,开发新需求。

git clone https://github.com/*****/gitunion.git

查看小王当前所所在的分支

git branch

可以看出当前只有master一个分支。此时通过git的图形工具查看分支指针的位置。

gitk

可以看出当前分支指针指向master。此时小王开发了部分需求并进行了提交。

git push origin master

提交后我们再来看下分支指针的位置:

可以看出分支指针向前移动了一个节点。这里我们可以得出结论:

分支指针总是随着提交而移动并且指向最新的那次提交。

此时小张入职,和小王一起在同一个分支开发。小张克隆仓库,拉取代码,并且在本地进行了一次提交。

git clone https://github.com/*****/gitunion.gitgit add Hello.javagit commit -m 'xiaozhang first commit'

此时观察小张的分支指针,可以看到小张的分支指针指向了他的最新提交。

此时小王还在继续开发,并且在他的本地进行了第二次提交

此时小王的分支指针显示如下:

此时我们可以得出结论:在各自的版本库上,分支指针的移动对于其他人员是透明的。

这时候项目完工,双方都提交了代码到远程仓库上。

此时观察分支的指针图:

可以发现,提交后,远程仓库的分支指针指向了两个人提交的合并。由此我们可以得出结论:在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的最新状态。

二,两人在不同分支上开发

此时小张接了新的需求,和小王的需求不一样。于是小李决定在最新的代码基础上拉一个新分支。

在现有的master分支上创建slave分支:

git branch slave master

查看当前所有分支:

git branch

可以看到新的分支已经建立,不过此时分支指针还是指向master。现在切换分支:

git checkout slave

可以看到分支已经切换

并且可以发现两个分支都指向最新的提交,说明两个分支的代码相同并且是最新的。

此时小张开发了一部分并提交了修改到本地版本库

git add Person.javagit commit -m 'xiaozhang first commit on slave'

观察小张的分支指针指向,此时分支指针指向了slave分支的最新提交

此时小王依然在开发他之前的需求,并且提交了一次最新的修改到本地版本库

git add Teacher.javagit commit -m 'xiaowang third commit'

我们观察小王的分支指针指向

可以看到小王的master指针指向了小王的第三次提交。因为小张新建的分支在他本地,所以小王此处看不到小张的slave分支。

此时人都提交了本地的版本库到远程仓库

小王:

git push origin master

小张

git push origin slave

小张新拉的分支已提交到版本库。

此时我们观察小王的分支指针指向:

小王的远程和本地master都指向了最新的修改。

我们观察小张的分支指向:

小张的远程和本地slave分支都指向了最新的修改。

由于在两个不同的分支上开发,我们发现他们并没有进行分支合并。

于是我们得出结论:两个分支开发提交后不会进行自动合并。

三,分支切换

此时小张继续提交了最新的修改

git add Student.javagit commit -m 'xiaozhang second commit on slave'

观察小张的分支指针可以发现是继续向前移动的。

此时由于小张的项目紧急度高,小王切换到了小张的分支上开发。

拉取小张的分支:

 git pull origin slave

可以看到小王的工作空间中多了小张的修改。这里可以看出:不同的分支存放在同一个工作区中。

小王切换分支(注意:当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分支):

git checkout slave

观察小王的分支指向:

可以看出分支切换后指向了小张的最新的提交。于是可以得出结论:分支的切换,分支指针总是指向最新的提交。

到这里。我们对分支的研究已经基本差不多了。相信大家能够看明白,小编写的比较详详细和基础。

总结:

 1.分支指针总是随着提交而移动并且指向最新的那次提交。

 2.在各自的版本库上,分支指针的移动对于其他人员是透明的。

 3.在一个分支上开发,远程仓库会对多人的提交进行合并,以保持版本库的      最新状态。

 4.当前分支若有修改未为提交,分支切换会被拒绝,强制提交会覆盖当前分     支.

 5.两个分支开发提交后不会进行自动合并。

 6.不同的分支存放在同一个工作区中。

7.分支的切换,分支指针总是指向最新的提交。

欲穷千里目,更上一层楼!祝大家事业有成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41217242

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值