【第三章】Git分支(下)

一、分支的管理

git branch 显示所有分支的清单,当前工作分支前面会有一个*号
git branch -v 显示每个分支的最后一次提交对象的信息
git branch -av 详细显示所有分支的信息
git branch --merged 显示哪些分支是被合并的
git branch --no-merged 显示哪些分支是没有合并的
git branch -d xxx 删除分支(如果删除一个没有合并的分支,会出现报错信息)
git branch -D xxx 强制删除分支

二、利用分支进行开发的工作流程

通常来说,master放置的是稳定的代码内容,当新添加的功能稳定之后会被合入到master中,下面是一个开发中对分支的使用的实例:
在这里插入图片描述
现在我们从C0工作到C1,然后开启一个iss91的分支来修复91号问题;
修复问题时,提交到了C6又冒出来一个新的想法,于是从C4的地方拉出一个iss91v2;
与此同时,master也在继续往前走着,走到C10时,拉出来一个dumbidea来做某些实验;

现在到了合并的环节了,我们决定采取iss91v2的方法,并且发现dumbidea是个好想法,也想合入到主分支中。
比较好的步骤是:舍弃掉iss91分支中的C5和C6,将iss91和iss91v2合并,此时由于iss91是iss91v2的直接上游,所以直接快进。最后,将dumbidea和iss91v2进行合并,对C1、C13、C11进行三方合并,解决冲突之后,生成新的提交C14
在这里插入图片描述
注意: 在进行这些操作的时候,只是本地上的操作,并没有涉及到与服务器的交互

三、远程分支

本地仓库中,“远程分支”只是一个对远程仓库中的分支的索引,他们是一些无法移动的本地分支,像是书签一样。

用(远程仓库名)/(分支名)来表示远程分支。
第一次使用clone时,Git创建了一个本地分支master和一个远程分支origin/master,他们都指向了origin上的master分支,当远端仓库的master往后移动时,本地的origin/master是不会往后移的。
在这里插入图片描述
运行git fetch origin 来将远端服务器上的数据同步到本地,该命令第一步找到origin是哪个服务器上的,然后从上面获取本地没有的数据,更新到本地的数据库;第二步是将origin/master指针移动到最新的位置上。
在这里插入图片描述

四、推送本地分支

想要和其他人分享某个本地分支,需要将其推送到一个你有读和写权限的远程仓库。假如现在有一个叫做serverfix的本地分支需要和他人一起开发,那么可以运行git push (远程仓库名)(分支名):

git push origin serverfix 本句的意思是git push origin refs/heads/serverfix:refs/heads/serverfix,意思是“将我本地的serverfix分支推送到远程仓库中的的serverfix分支中去”。至于这句话的拓展意思暂时先不讨论,到第九章会学到。

git push origin serverfix:serverfix 同样可以实现相同的效果,他的意思是“将我本地的serverfix分支传到远程仓库中去,仍旧称其为serverfix分支”。如果想把远程分支名字叫做“awesomebranch”,可以使用git push origin serverfix:awesomebranch 来推送数据。

注意: 当你fetch了一个远程分支,你并不能对其做任何操作,你也不会有一个新的分支,有的只是一个不能改变的origin/xxx指针。

如果想要把远程分支的内容合并到当前的分支中,可以运行git merge origin/serverfix。因此,我们可以这样做:
git branch serverfix
git checkout serverfix
git merge origin/serverfix
或者是使用下面这句命令:
git checkout -b serverfix origin/serverfix
这样,你得到了一个叫做serverfix的本地分支,其内容与远程分支origin/serverfix一致了。

五、跟踪远程分支

从远程分支checkout出来的本地分支称为跟踪分支。 所谓跟踪分支(tracking branch)是一种和某个远程分支有着直接联系的本地分支,在跟踪分支中输入git push,Git会自行判断应该向哪个服务器推送数据,同样,使用git pull时,git也会自行获取所有远程索引,并把他们的数据都合并到本地分支中。

在进行最初的clone操作时,Git会自动创建一个名为master的分支来跟踪origin/master,这就是git push和git pull最开始能够运作的原因。

跟踪可以使用–track来实现,“git checkout --track origin/serverfix”。或者是用上文所说的git checkout -b sf origin/serverfix来实现将本地分支sf跟踪到origin/serverfix分支。

还记得我第一次创建一个分支跟踪远程l710-main分支时,师父在我电脑上敲了这样的一行命令:“git checkout -b l710-main -t origin/l710-main”

六、删除远程分支

注意下面的两条命令:
git push origin :serverfix 将一个空白变成了远程分支“serverfix”,从而删除了serverfix分支
git push origin serverfix:serverfix 将本地分支serverfix分支推送到了远程分支serverfix上
两条命令的原型不同,分别是:
git push [远程名] :[分支名]
git push [远程名] [本地分支]:[远程分支]

七、分支的衍合

之前说过merge是将一个分支中的修改整合到另一个分支中,除了merge方法,还有一个方法是rebase(衍合)。衍合的操作原理是把C3中产生的变化补丁在C4的基础上重新做一遍。下图左图为merge原理,右图为rebase原理。
在这里插入图片描述
rebase过程是:
git checkout experiment
git rebase master

衍合有意思的地方在于,你可以节选出某一段的提交合并到主分支上,例如使用git rebase -onto master server client,可以使得C8和C9直接合并到master后面。
在这里插入图片描述
但是要注意在公共仓库中,不要对分支进行衍合操作,那样会变得一团糟。
因为每次的衍合的实质是抛弃了一些现存的提交对象,同时创建了一些类似但是不同的新的提交对象。当你在公共区域干了这件事,别人下载更新之后需要合并,就会又重新合并一次。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值