【发布时间】:2016-11-22 22:24:42
【问题描述】:
我正在尝试撤消中间的提交,同时保持以下提交不变。在找到这些帖子之前,我认为这可能是不可能的:Post 1 & Post 2。 (最终目标可能会重复,但我确实没有成功。对此我深表歉意。)
不幸的是,我仍然不知道如何正确使用git rebase -i。我创建了一个示例存储库,如下所示:
commit cc2576365a9716bb9f96e195e599190d3c70fba0
Author: zzy
Date: Sun Jul 17 14:30:53 2016 -0400
commit #3
commit 11d9f8fdc69be8b4530e4b70c9661b4e34287afe
Author: zzy
Date: Sun Jul 17 14:30:36 2016 -0400
commit #2
commit 4770e08eb54d0d582bd4b391f2361a328b417cdf
Author: zzy
Date: Sun Jul 17 14:29:58 2016 -0400
commit #1
每次提交都会在名为a 的文件中添加一个新行(请参阅下面a 的内容):
提交 #1 之后
1
提交 #2 之后
1
2
在提交 #3 之后
1
2
3
现在我打算删除提交 #2,a 应该如下所示:
1
3
我尝试了git rebase -i 11d9f8fdc69be8^ 的命令,得到的文本文件为:
pick 11d9f8f commit #2
pick cc25763 commit #3
我删除了第一行,只保留了提交 #3 并退出了文件。但我收到以下错误:
error: could not apply cc25763... commit #3
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
Could not apply cc2576365a9716bb9f96e195e599190d3c70fba0... commit #3
文件a变成:
1
<<<<<<< HEAD
=======
2
3
>>>>>>> cc25763... commit #3
我很困惑为什么 2 还在这里以及为什么会有冲突。谁能帮我得到预期的结果?提前致谢!
【问题讨论】:
-
您在提交中引入的更改彼此过于接近。它们不重叠,但为了确保不会丢失任何内容,
Git和任何其他diff程序在差异中至少包含两行上下文(一前一后)。从这个角度来看,您的提交引入的更改重叠,这就是发生冲突的原因。使用更大的文件重试,并注意将更改分开几行,它会按预期工作。 -
除了what axiac mentioned,您可能还想将
merge.conflictstyle设置为diff3,这样Git 不仅会显示两个不同的版本,还会显示共同的基础部分。对于这个特殊的微不足道的例子来说,它并不是很有用,但总的来说,我发现使用diff3模式集更容易阅读合并冲突。 -
@axiac 非常感谢你!!!!是的,我用完全相同的命令更改为一个更大的示例,它可以工作!
-
@torek 请问如何启用它?我做了一个快速调查,发现这个命令:
git config --global merge.conflictstyle diff3。是你在这里提到的吗? -
您可以使用 git revert 撤消提交,而不是变基。值得一提的是..即使您明确要求重新定位解决方案。 $git revert SHA_commit2.. 这样做可以跟踪更改
标签: git github version-control rebase