gpt4 book ai didi

git - 修复被推送的 'backwards' git merge

转载 作者:太空狗 更新时间:2023-10-29 14:44:30 24 4
gpt4 key购买 nike

我在我的 git 分支之间遇到了一个问题,我不确定如何处理。假设我正在处理的每个版本都有单独的分支。例如,我有“Release-1”和“Release-2”作为我的分支。这些版本本质上是连续的,即“Release-2”包含“Release-1”中的所有内容,但反之则不然。就我而言,我不小心将“Release-2” merge 到“Release-1”中并在没有意识到我的错误的情况下推送了它。一个我意识到我犯了一个错误,我继续发布:

git revert -m 1 <sha-of-bad-merge-commit>

这似乎解决了所有问题; “Release-2”代码中没有一个在“Release-1”中,而且看起来都是正确的。我把它推到我的上游,认为它已经解决了。快进到今天。我已经在“Release-1”分支中应用了错误修复。现在,我想将“Release-1” merge 到“Release-2”中,但我遇到了冲突。 Git 认为在 revert 中所做的更改应该 merge 到“Release-2”中。本质上,当我尝试 merge 时,git 想要删除从“Release-2”意外引入“Release-1”的“Release-2”中的更改。

我尝试研究解决方案,但没有找到。我发现最接近的应用是过早 merge 、恢复,然后在稍后尝试再次 merge 。解决方案是还原还原,然后再次进行 merge 。我认为这在这种情况下行不通,因为这会将本不应包含在“Release-1”中的更改重新引入“Release-1”。

除了逐行查看每个受影响的文件以选择正确的更改集之外,是否有一种很好的“基于 git”的方法来解决这个问题?我不想简单地从存在冲突的“Release-2”分支中获取更改,因为其中一些可能是合法的。此外,我考虑过将错误修复分支 merge 到“Release-2”,但将来可能会再次出现该问题。我想防止这种情况发生。

下面是大致的情况:

(Release-2) ---A----B----C---x---x---------*D*
\ /
(Release-1) ---x----Y------M---x---^M----Z

假设 A、B 和 C 是我想要的“Release-2”的正常提交。 “Release-1”的尖端是 Y,仅包含“Release-1”作品。提交“M”是我不小心在“Release-1”分支中 merge 提交“C”和提交“Y”的地方。在某些时候,我注意到我的错误并恢复 merge (提交'^M')。提交“Z”然后在其中包含我的修补程序。此时我想将“Release-1” merge 回“Release-2”。我这样做并以“D”结束。这是我遇到问题的地方。本质上,我在“D”处的 merge 告诉它要删除我不想要的“A”、“B”和“C”中所做的所有更改。由于 merge 还原,其他文件显示为冲突。例如,当我进行还原时,我在“Release-2”中想要的一些文件在“Release-1”中被删除了。现在,在“D”处,git 告诉我存在 merge 冲突,因为一个分支删除了文件而另一个分支修改了文件。

如果有人有任何建议,我将不胜感激。谢谢!

最佳答案

(我将把你的 ^M 提交称为 Mrevert,因为 ^ 字符在某些后面的命令。)

执行 git merge --abort 以放弃创建提交 D 的尝试。

因为你有一系列的提交 x--Mrevert--Z,你需要 pull 入 xZ更改,但不是 Mrevert 的,您需要一个三步过程:

  1. 使用 git merge Mrevert^ 将所有更改引入 Mrevert 点。 (c^ 语法表示“提交 c 的父级”。)
  2. 使用 git merge -s ours Mrevert 告诉 git ^M 还原提交的更改已经在您的分支中。 -s ours 表示保留我们的(即 Release-2 的)树版本,而不用担心任何真正的“merge ”。
  3. 使用 git merge Z merge 来自 Z 的更改。

这将生成如下的提交图:

(Release-2) ---A----B----C---x---x---M1-----M2------M3
\ / / /
(Release-1) ---x----Y------M-------x---Mrevert----Z

如果您执行 git diff M1 M2,您会看到 M2 不会将任何更改 pull 入 Release-2。

关于git - 修复被推送的 'backwards' git merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36208895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com