Git revert覆盖多个提交



我在分支中添加了3个提交:

  • '3'->c3425f(added: <h3>1</h3>)
  • "2"->c34252(added: <h2>2</h2>)
  • "首次提交"->c3425d(added: <h1>1</h1>)

最后我得到了这个结构:

<h1>1</h1>
<h2>2</h2>
<h3>3</h3>

现在我想排除c34252提交。为此,我使用了git revert c34252

这样做我的IDE向我展示:

<h1>1</h1>
<<<<<<< HEAD
<h2>2</h2>
<h3>3</h3>
=======
>>>>>>> 

因此,它建议我第二次提交包含<h2>2</h2><h3>3</h3>,但应该只包含<h2>2</h2>。那么,为什么git建议我第二次提交包含这两个更改呢?应该使用哪个git命令来仅排除第二次提交?

TLDR

这并没有什么神奇的命令。你需要向git解释你到底想要什么。

更深入

当你看到你的承诺";2〃:

git show c34252

您将看到提交包含一个类似于以下的差异:

diff --git a/file b/file
index ace652e..6d8ba51 100644
--- a/file
+++ b/file
@@ -1 +1,2 @@
<h1>1<h1>
+<h2>2<h2>

所以当你运行时

git revert c34252

CCD_ 12尝试应用与此相反的方法。它试图找到

<h1>1<h1>
<h2>2<h2>
(end of file)

然后移除h2线。然而,它却发现

<h1>1<h1>
<h2>2<h2>
<h3>3<h3>
(end of file)

所以它不确定您想要获得什么:只删除h2行,或者从h2直到文件结束。你需要向git解释你想要什么,没有办法绕过这个AFAIK。当编辑同一行或紧接在一起的行时,经常会出现这种冲突。

最新更新