设为首页 收藏本站
查看: 871|回复: 0

[经验分享] Git 分支管理和冲突解决

[复制链接]

尚未签到

发表于 2018-1-14 16:35:32 | 显示全部楼层 |阅读模式


Git 分支管理和冲突解决

创建分支
  git branch
  没有参数,显示本地版本库中所有的本地分支名称。
  当前检出分支的前面会有星号。
  git branch newname
  在当前检出分支上新建分支,名叫newname。
  git checkout newname
  检出分支,即切换到名叫newname的分支。
  git checkout –b newname master
  这个命令将上面两个命令合并:在master分支上创建分支newname分支并检出到该分支。

合并分支间的修改 Merge
  合并操作将两条或多条分支合并到一起,实际上有好几种分支合并方法,下面介绍主要的三种:
  1.直接合并(straight merge)
  把两条分支上的历史轨迹合并,交汇到一起。
  比如要把dev分支上的所有东东合并到master分支:
  首先先到master分支:git checkout master
  然后把dev给合并过来:git merge dev
  注意没参数的情况下merge是fast-forward的,即Git将master分支的指针直接移到dev的最前方。
  换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么Git在合并两者时,只会简单移动指针,所以这种合并成为快进式(Fast-forward)
  2.压合合并(squashed commits):
  将一条分支上的若干个提交条目压合成一个提交条目,提交到另一条分支的末梢。
  把dev分支上的所有提交压合成主分支上的一个提交,即压合提交:
  git checkout master
  git merge --squash dev
  此时,dev上的所有提交已经合并到当前工作区并暂存,但还没有作为一个提交,可以像其他提交一样,把这个改动提交到版本库中:
  git commit –m “something from dev”
  3.拣选合并(cherry-picking):
  拣选另一条分支上的某个提交条目的改动带到当前分支上。
  每一次提交都会产生一个全局唯一的提交名称,利用这个名称就可以进行拣选提交。
  比如在dev上的某个提交叫:321d76f
  把它合并到master中:
  git checkout master
  git cherry-pick 321d76f
  要拣选多个提交,可以给git cherry-pick命令传递-n选项,比如:
  git cherry-pick –n 321d76f
  这样在拣选了这个改动之后,进行暂存而不立即提交,接着可以进行下一个拣选操作,一旦拣选完需要的各个提交,就可以一并提交。

冲突处理
  当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(conflict)。解决冲突需要人工处理。
  比如当前在master分支,想把dev分支merge过来,结果产生了一个冲突,打开文件内容可以看到这么一个冲突:
  

<<<<<<< HEAD  

  
test in master
  

  

=======  

  
test in dev
  

  
>>>>>>> dev
  

  <<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
  HEAD指向当前分支末梢的提交。
  =======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。
  >>>>>>>之后的dev是该分支的名字。
  对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。

删除分支
  有些分支没有必要长期保存,比如分支中的代码已经打了标签并已发布,或者实验分支已经成功完成工作或中途废弃等等。
  注意:打了标签的分支,Git在删除该分支时,从版本树起始到此标签间的全部历史轨迹均会保留,此时删除分支操作只是删除分支本身的名称,因此可以说该分支没有必要长期保存。
  而在其他版本控制工具中,删除分支通常意味着删除分支上的所有历史轨迹,所以不能因为打了标签就认为其没有必要保存。
  删除一个分支dev2:
  git branch –d dev2
  注意不能删除当前所在分支,需要转到别的分支上。
  如果要删除的分支已经成功合并到当前分支,删除分支的操作会直接成功。
  如果要删除的分支没有合并到当前所在分支,则会出现提示,如果确定无须合并而要直接删除,则执行命令:
  git branch –D dev2
  进行强删。

分支重命名
  重命名分支:
  git branch –m oldname newname
  -m不会覆盖已有分支名称,即如果名为newname的分支已经存在,则会提示已经存在了。
  如果改成-M就可以覆盖已有分支名称了,即会强制覆盖名为newname的分支,这种操作要谨慎。

参考资料
  《版本控制之道——使用Git》(Pragmatic Version Control Using Git)
  Git分支管理策略:http://www.ruanyifeng.com/blog/2012/07/git.html
  Git Reference: http://gitref.org/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435052-1-1.html 上篇帖子: Git的深入理解与GitHub托管服务的使用 下篇帖子: Git 查看文件的历史
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表