Git快速入门(三):理解分支原理和基本操作

对于比较复杂,需要长期更新的项目,分支管理十分重要,在使用分支前一定要了解分支管理的一些基本原理。

首先要知道的是,本地仓库的版本都是以Object Graph形式进行管理的,Object Graph如下:
在这里插入图片描述
这个图被存储在本地初始仓库后的.git文件中,当然文件夹中还有其他文件(也可以存在多个这样的图)。
这里需要注意的是,箭头指向的是上一个版本,箭头起点端是在上一个版本基础上更新的版本。
以上面为例,41c4b8f是最早的版本,1255f4e是在41c4b8f基础上更新后的版本。HEAD永远指向当前操作版本(而不是master!!!)。
分支只是一个指向某个版本的指针,因此就上面图而言,只有一个分支:master(因为只有master指针),但绝不能认为在此之前没有出现过分支,显然,一定出现过,因为在版本1255f4e后出现了分叉,如果没有分支,则整个Object Graph一定是线性的,至于为什么,看完后面就会明白。
然后需要知道的是,分支操作基本上就是创建,删除,合并等。
对上面图来说,1255f4e版本之后一定创建了分支,至于为什么没有别的分支,因为该指针被删除了。
而版本3e62e60是版本82e049e和6400936合并的结果。

下面详细讲解分支基本操作和内部Object Graph的具体变化:
以下面图为例:
在这里插入图片描述
当前只有一个master分支(默认分支,不用创建)。
我们使用如下命令创建一个新分支:

git  checkout –b 分支名(以iss53为例)

可以发现,两个指针指向同一个版本。
此时就会产生一个名为iss53的指针指向C2,同时git会切换到该分支:
在这里插入图片描述
当你对C2修改后(不修改也行),commit则会得到如下图:
在这里插入图片描述
这时iss53会单独形成一个新的版本,同时master并没有改变,这就是分支创建。
你可以使用如下命令进行分支切换:

git checkout 分支名 

让我们在master下再创建一个名为hotfix的分支。

git checkout master 
git checkout –b hotfix 
git commit

结果如下:
在这里插入图片描述
假设C4版本已经成熟,C3是C4的中某个功能的改进版本但不成熟,则我们需要将master指向C4版本,即将master与hotfix进行合并,命令如下:

git checkout master 
git merge hotfix

先切换到master分支,然后让它指向hotfix指向的版本,Object Graph如下:
在这里插入图片描述
然后我们就可以删除hotfix分支了,同时切换到iss53分支,使用如下命令:

git branch –d hotfix 
git checkout iss53 
git commit

在这里插入图片描述
假设我们iss53版本更新完成,需要将修改后的版本和C4合并,则可以使用如下命令:

git checkout iss53 
git commit
git checkout master 
git merge iss53

在这里插入图片描述
注意:
merge时,git会自动评测两个带merge的版本,然后通过某种机制进行merge(本人也不太懂),而且不是所有的版本都能merge,如果两个版本有逻辑上的矛盾,则会提示merge失败,这时需要人为对两个版本矛盾点进行修改,然后才能正常merge。

想要在远程仓库中拥有分支,只需在本地切换到对应分支,然后push即可:

git push -u 远程仓库地址 分支名

下面是对分支管理的命令总结:

git checkout –b XXX  //创建分支
git checkout XXX  //切换分支
git branch –d XXX  //删除分支
git merge  XXX  //合并分支
git branch  //查看当前已创建的分支名
git branch -a  //查看所有分支
git branch -r  //查看远程分支情况

在github中可以直接查看远程分支情况,在
Insights->Netork栏中。
下面是本人某个远程仓库的版本变化情况,供大家分析:
在这里插入图片描述
如果知道本人大概如何操作的,那么你就已经较为熟练的掌握分支管理原理了。
左半部分图是先前版本,右半部分图是将整个项目copy后重新进行修改后的提交。
可以发现,copy后修改提交会生成第二个Object Graph。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值