Git的代码合入流程详解

11-14 196阅读 0评论

?=总述

代码合入流程用于减轻代码合入复杂度、简化主分支历史(具有线性的历史)、保证合入代码对主分支的HEAD有效。代码合入分为两步

解决冲突:将需要合入的分支变基到目标分支之上。保证合入代码对目标分支的HEAD有效。此时会解决所有代码冲突。执行合入:向目标分支提交merge请求,执行合入CI后完成合入。

其中第一步“解决冲突”的方法分为两种种情况:

Squash。如 feature分支 向 dev分支 合入;存在冲突的合入。此时会出现 合入过程冲突多、合入结果复杂(commit多)、合入message不清晰(未能完整描述改动内容)的问题。此时不需要保存历史commit,仅需要干净的将feature合入master。Rebase。如 hotfix分支 向 dev分支 合入;feature分支 向 feature分支 合入。此时冲突少、合入结果简单、需要保存历史commit。

其中第二步“执行合入”应采用 merge no-fast-forward 的方式。确保合入信息可追溯和易回退。

Rebase解决冲突

Git的代码合入流程详解

适用情况

hotfix → developfeature → featuredevelop → master

其中commit数量少(1~2个),开发周期短(1day)。

操作方式

其中dev分支向master分支合入。通过执行 git log --all --graph --decorate 可看到如下图。两个分支已经分开,如果通过在master分支Git merge合入且存在冲突,那么会触发三方合并在master生成merge commit污染主分支提交历史,这是我们不想看到的。

Git的代码合入流程详解

此时我们执行以下流程解决问题

git Checkout dev  && git pull dev git rebase master // 保证master与remote仓一致 // 若发生冲突执行 git merGetool  解决冲突 git rebase --continue 

此时可以看到master分支和dev分支干净得合在一起。经过单元测试并确认我们的改动没有bug后,我们可以push并开启mr。

Git的代码合入流程详解

Squash解决冲突

Git的代码合入流程详解

适用情况

feature → developGitLab → gerrit (此处为泊车自动同步代码中用到)

其中commit数量多(> 2个),开发周期长(> 1day),冲突量大(每个commit可能都有冲突)。

操作方式

此处仍然是将dev合入master。其中dev分支提交历史混乱(有tmp提交),commit号多且每个commit都与master有冲突。此时在master分支执行 git merge dev 会触发三方合并,且保留不必要的commit历史。不必要的提交信息如图

Git的代码合入流程详解

操作的初始状态如图

Git的代码合入流程详解

此处我们执行如下操作,在master分支解决冲突并压缩提交。随后checkout一个提交分支并开启mr。这有利于简化主分支提交。但需要小心,dev分支不能再使用,需要重新从master分支拉取新的dev。

git checkout master // 保证master与remote一致 git merge --squash dev // 解决冲突  git mergetools  、  git commit -m <总结此次提交的所有内容> git checkout -b <mr-branch> git push xxxx 

mater结果如图

Git的代码合入流程详解

Merge执行合入

这里强调使用merge no fast forward的目的是保留合入信息。

git checkout master git merge --no-ff dev 

Git的代码合入流程详解

以上就是Git的代码合入流程详解的详细内容,更多关于Git代码合入流程的资料请关注云初冀北其它相关文章!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,196人围观)

还没有评论,来说两句吧...