如何在Git中重新进行合并?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我在这里遇到了一些问题:我28s在Git中有一个特定于问题的分支,我将它合并到了一般develop分支中。原来我做得太快了,所以我用git-revert来取消合并。然而,现在的时间已经到了合并28sdevelop,但混帐合并命令看到原始的合并,并愉快地宣布,一切都很好,树枝已经被合并。现在我该怎么做?创建一个“还原”还原“28s - >开发”“'提交?似乎不是一个好办法,但目前我无法想象任何其他方法。

什么树结构看起来像:

提问于
用户回答回答于

你必须“恢复回复”。取决于你是如何回复的,可能并不像听起来那么容易。看看这个主题官方文档

---o---o---o---M---x---x---W---x---Y
              /
      ---A---B-------------------C---D

允许:

---o---o---o---M---x---x-------x-------*
              /                       /
      ---A---B-------------------C---D

但是这一切工作?当然可以。你可以恢复合并,从纯粹的技术角度来看,git非常自然,并且没有真正的麻烦。 它只是认为它是从“合并前的状态”变为“合并后的状态”,就是这样。 没有什么复杂的,没有什么奇怪的,没有什么真的危险 Git会做甚至没有考虑它。 所以从技术的角度来看,恢复合并没有任何问题,但从工作流的角度来看,这是你通常应该尽量避免的。 如果可能的话,例如,如果发现得到了合并到主树,出了问题,而不是恢复合并,尽量真的很难

  • 将问题分解成你合并的分支,并修复它,
  • 或尝试恢复导致它的个人提交。

是的,它更复杂,不,它并不总是有效(有时答案是:“哎呀,我真的不应该合并它,因为它还没有准备好,我真的需要撤消所有的合并”)。那么你真的应该恢复合并,但是当你想重新合并时,你现在需要通过恢复恢复来完成合并。

用户回答回答于

假设你有这样的历史

---o---o---o---M---W---x-------x-------*
              /                      
      ---A---B

如果A,B失败并且W是M的恢复

所以在我开始修复发现的问题之前,我会选择W提交给我的分支

git cherry-pick -x W

然后我在我的分支上恢复W提交

git revert W 

我可以继续修复。

最终的历史可能如下所示:

---o---o---o---M---W---x-------x-------*
              /                       /     
      ---A---B---W---W`----------C---D

当我发送一个PR时,它会清楚地显示PR撤销撤销并添加一些新的提交。

扫码关注云+社区