gpt4 book ai didi

git - 重做已提交 merge 的一部分

转载 作者:行者123 更新时间:2023-12-01 13:43:20 25 4
gpt4 key购买 nike

我已经提交了一个大 merge 。后来,似乎有些文件没有正确 merge 。我只想重做这些文件,而不是整个 merge - merge 很大,我不想解决已经正确解决的所有冲突。

如果这发生在我提交 merge 之前,我可以这样做

$ git checkout -m faulty_folder/

将错误的 merge 文件重置为冲突状态,就像 merge 开始时一样。问题是我已经提交了 merge ,这个命令似乎不再起作用了。一个简单的

$ git reset --soft HEAD^

也不行。这实际上是从 merge 开始之前从 HEAD^ 中 check out 文件。

有没有办法回到那个 merge 状态?

更新

仅将文件编辑为正确对我来说是不够的。如果可能的话,我会这样做,但我发现 merge 太复杂了。我需要再次获得三向差异才能可靠地解决冲突。

最佳答案

事实上,您可以简单地再次执行 merge 。 (确保您关闭了 git rerere。)

请记住,git merge 查看三件事:您当前的提交、您要求它 merge 的提交以及这两个提交的 merge 基础。 (好吧,当然还有你的策略参数等等,但你也可以重复这些。)你确实已经提交了一个 merge 结果,但你仍然可以回到你之前的提交:

          o---o---X       <-- otherbranch
/ \
...--o--* \
\ \
o--o--o--Y--M <-- HEAD -> yourbranch

您的 merge M 是 merge 提交 YX 的结果(使用 merge 基础 *)。但是您可以将提交 Y 作为分离的 HEAD 或新分支 checkout 。创建一个新分支:

git checkout -b newbranch yourbranch^

产生:

          o---o----X      <-- otherbranch
/ \
...--o--* M <-- yourbranch
\ /
o--o--o--Y <-- HEAD -> newbranch

(这是完全相同的图表,但我将 M 向上移动了一点,以便为 newbranch 腾出空间以指向提交 Y — 想想图形有点像橡胶/有弹性,或者印在 Play-Doh® 上,等等)。现在你可以 git merge otherbranch 并开始重新创建提交 M

现在您可以使用 git checkout yourbranch -- path 获取 merge 结果(而不是重新解析)各种 path(甚至是顶部路径),并且可选git checkout -m 部分重新创建冲突。

当你全部完成后,git commit 将创建一个新的 M2 merge ,其第一个父级是 Y,第二个父级是 Xnewbranch 将指向新的 merge M2

关于git - 重做已提交 merge 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38011005/

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