gpt4 book ai didi

git - 修复一个坏的 merge

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

所以我们的团队对 Git 还很陌生。我们遇到了类似 this one 的情况,更糟糕的是:开发人员进行了错误的 merge ,并且此错误的 merge 已被埋没在大约 20 次后续提交中,因为我们仅在一天后才注意到错误的 merge 。

我们如何解决这个问题?

编辑: 看起来 git revert -m 命令可能是诀窍,但我们真正需要还原的只有一个文件……一个大的 edmx 文件被严重破坏了。有什么方法可以限制恢复到那个文件吗?

最佳答案

鉴于您的编辑,我建议提取“预 merge ”文件的良好副本以及任何需要的更改。有多种方法可以做到这一点:您可以反向应用 merge 带来的更改,希望任何后续更改不会冲突或重叠;您可以提取一个好的预 merge 版本并检查是否需要任何更新;等等。

例如,如果 <revspec>是具有已知良好版本文件的提交:

$ git log <revspec>..HEAD -- path/to/file # find changes to file

(这将显示所有可从 HEAD 访问但不从 <revspec> 或其父级访问该文件的提交;这应该包括 merge 本身,这显然是您想要的保留,但也会显示做出更改的提交,毕竟您可能想要保留)。

$ git checkout <revspec> -- path/to/file

(这只是将旧版本提取到工作目录中,并将其也写入索引,即,它已经准备好提交)。

现在,如果有您确实想要更改的修订:

$ git show <rev> -- path/to/file | git apply
... repeat for all <rev>s, make sure they all apply;
do manual work if needed ...
$ git add path/to/file

如果三个都没有这样的修订你不需要应用任何东西,也不需要add结果;你现在准备好了 git commit .


一种不同的方法,但现在您必须选择 merge 的哪“边”引入了坏东西。假设坏东西来自第二个父级(分支 merge ,而不是分支 merge ):

$ git diff <mergerev>^1 <mergerev> -- path/to/file | git apply -R

这里我们得到 git diff显示文件如何从“好”(mergerev 的第一个父级)变为“坏”(mergerev,从第二个父级引入更改),并将这些更改“反向应用”到工作树。

如果一切顺利,git add修复后的文件并提交。

关于git - 修复一个坏的 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361510/

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