繁体   English   中英

在第一次合并恢复后,再次将git分支A合并到分支B.

[英]Merging git branch A into branch B once again after the first merge has been reverted

我的情况如下。

              o---o---o issue-2 
             /         \
o---o---o---o---M---R---o develop
         \     /
          o---o---F issue-1

关于问题1有一些工作。 审查后,它被合并到develop(commit M)中。 不幸的是,很快发现存在一些严重的错误。 为了解决其他问题,合并提交被还原(提交R)。 后来,其他问题(如问题-2)也被合并到了开发中。 原始分支上的代码是固定的(提交F)。

问题是 - 如何将问题-1合并到现在的开发中? 简单合并将保留还原提交R的效果,并且仅应用尚未在开发分支(提交F)中的更改,而不是所有这些更改。

有几个选择:

  1. 恢复还原
    • 专业人士:这是Git文档推荐的方法,而且很容易做到
    • 缺点:丑陋的历史,这使得人们更难以理解代码如何随着时间的推移而演变(例如, git blame将显示恢复的恢复而不是issue-1分支上的单个提交)
  2. 重新定义恢复的分支并合并它
    • 专业人士: git blame和其他历史挖掘工具使得更容易理解代码历史
    • 缺点:看历史可能有点令人困惑(为什么历史上有两套看似相同的提交?有人贬低了吗?)
  3. 编辑历史记录:重做您的开发分支以删除提交M和提交R
    • 专业人士:最干净的最终结果
    • 缺点:
      • 如果你的存储库是共享的,则是危险的,除非你的用户对Git很好并且你已经将计划传达给每个人
      • 很难做到因为Git没有简单的历史编辑工具:

一般来说,我建议的方法是恢复还原。 我建议按照以下详细步骤操作:

  1. 查看原始的坏分支:
    git checkout issue-1
  2. 合并来自父分支的最新提交:
    git merge --no-ff develop
  3. 还原还原(其中R是还原提交的SHA1 ID):
    git revert R
  4. 修复分支中的缺陷。 (你已经在提交F完成了这个;为了别人的缘故,我假设你需要做一个额外的修复。)
  5. 测试测试
  6. 切换回父分支:
    git checkout develop
  7. 合并修复的分支:
    git merge --no-ff issue-1

生成的图形应如下所示:

              o---o---o issue-2 
             /         \
o---o---o---o---M---R---o-------------o develop
         \     /         \           /
          o---o---F-------o---RR---F2 issue-1

它不漂亮,但人们应该能够弄清楚发生了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM