Git的代码合入流程详解

 更新时间:2022年11月13日 11:40:00   作者:邢越峰  
这篇文章主要为大家介绍了Git的代码合入流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

总述

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

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

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

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

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

Rebase解决冲突

适用情况

  • hotfix → develop
  • feature → feature
  • develop → master

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

操作方式

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

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

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

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

Squash解决冲突

适用情况

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

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

操作方式

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

操作的初始状态如图


此处我们执行如下操作,在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结果如图

Merge执行合入

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

git checkout master
git merge --no-ff dev

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

相关文章

  • 自己的vscode-settings.json配置详解

    自己的vscode-settings.json配置详解

    这篇文章主要介绍了自己的vscode-settings.json配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • UTF8编码开发中页面空白问题的解决方法

    UTF8编码开发中页面空白问题的解决方法

    开发中一直没办法解决的一个问题页面采用UTF8编码,头部和尾部用了模板包含文件的方法,结果头部和尾部无端端各多出一个约10px的空行,什么也没有。
    2008-10-10
  • 网站程序员如何应对web标准

    网站程序员如何应对web标准

    网站程序员如何应对web标准...
    2007-04-04
  • Git实现克隆历史的某个版本

    Git实现克隆历史的某个版本

    这篇文章主要介绍了Git实现克隆历史的某个版本,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Vscode 打字特效插件Power Mode安装使用介绍

    Vscode 打字特效插件Power Mode安装使用介绍

    本文给大家推荐的是一款Vscode的打字特效的插件Power Mode的安装使用说明,插件非常的炫酷,推荐给大家,希望大家能够喜欢
    2020-02-02
  • 关于IDEA git 只有Commit没有Push的问题

    关于IDEA git 只有Commit没有Push的问题

    这篇文章主要介绍了关于IDEA git 只有Commit没有Push的问题,本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • git 报错:OpenSSL SSL_read: Connection was reset, errno 10054 解决方法

    git 报错:OpenSSL SSL_read: Connection was&

    这篇文章主要介绍了git 报错:OpenSSL SSL_read: Connection was reset, errno 10054 解决方法,涉及git配置信息及缓存相关操作技巧,需要的朋友可以参考下
    2023-04-04
  • git merge最简洁用法详解

    git merge最简洁用法详解

    git-merge 命令是用于从指定的 commit(s) 合并到当前分支的操作,本文重点给大家介绍git merge最简洁用法,感兴趣的朋友跟随小编一起看看吧
    2020-12-12
  • git中reset和revert区别小结

    git中reset和revert区别小结

    本文主要介绍了git中reset和revert区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Web 设计与开发者必须知道的 15 个站点

    Web 设计与开发者必须知道的 15 个站点

    今天读到一篇文章,介绍了15个对 Web 设计与开发师极端有用的站点,里面有不少也是我们一直在使用的,也许对很多人都有用,翻译出来以饷同仁。
    2009-08-08

最新评论