如何解决撤销提交引起的冲突问题

3

我正在学习如何使用Git和GitHub。我已经创建了一个简单的HTML文件,并且正在尝试还原一些更改。

我正在使用GitHub Windows应用程序,仓库在这里:https://github.com/ionutincau/Ceau

我的最后两个提交是“将13添加到列表”和“将帐户添加到列表”。我想还原提交“将13添加到列表”,但我得到了这个文件:

<!DOCTYPE html>
<html>

<head>
    <title>Hi</title>
</head>

<body>
    <p>Hi, this is my first version</p>
    <p>TODO List:</p>
    <p>- Pictures</p>
<<<<<<< HEAD
    <p>- 13</p>
    <p>- Accounts</p>
=======
>>>>>>> parent of 76f0f70... Add 13 to list
</body>

</html>

我需要做什么?这是如何工作的?
4个回答

4

这是一个简单的冲突。如果你没有添加accounts行,Git会计算出撤销76f0f70只是删除第13行。但现在它遇到了accounts行,并说:“哇,我不知道如何撤销76f0f70的更改。我已经在文件中标记了有问题的部分,你能手动帮我吗?"

因此,您需要打开文件,删除不需要的第13行以及Git插入的所有标记:

<body>
    <p>Salutare aceasta este prima versiune</p>
    <p>TODO List:</p>
    <p>- Poze</p>
    <p>- Accounts</p>
</body>

</html>

现在,您可以通过运行git add index.html并提交来标记冲突已解决。历史记录现在将变为:
$ git log --pretty=oneline --abbrev-commit | head -n 3
02933f8 Revert "Add 13 to list"
d4b2377 Add Account
76f0f70 Add 13 to list

而还原提交看起来像这样:

$ git show --oneline 02933f8
02933f8 Revert "Add 13 to list"
diff --git a/index.html b/index.html
index 9f99341..6bec1cf 100644
--- a/index.html
+++ b/index.html
@@ -9,8 +9,7 @@
        <p>Salutare aceasta este prima versiune</p>
        <p>TODO List:</p>
        <p>- Poze</p>
-       <p>- 13</p>
        <p>- Accounts</p>
 </body>

当然,在这种情况下,如果不使用 git revert,直接删除不想要的行会更容易。


0

我查看了你的提交历史。要删除你的提交“将13添加到列表”,首先你必须回到“重构”提交。

git reset --hard 8816fb
git cherry-pick d4b2377
git push origin HEAD --force

第一条命令将把你的头指向“重构”

第二条命令将把你的“添加账户到列表”合并到主分支

最后,你需要使用--force选项强制推送,因为你重置了头部。

如果你有任何问题或者我误解了你的问题,请告诉我。


那并不是还原。 - zoul
我认为他是在要求删除“将13添加到列表”的提交。 - DilumN
2
撤销提交与删除提交是不同的。 撤销不会改变现有的历史记录,而是记录一个新的提交来撤消不需要的更改。 - zoul
1
我想要撤销一个提交,而不是删除它。 - WhiteShadow
但我不明白为什么会这样,这只是一个简单的提交,本来不应该出现冲突的。 - WhiteShadow

0
如果您在两个提交中更改的行是相邻的,则会出现还原冲突。但是,如果您更改的行像这样:
<body>
    <p>Hi, this is my first version</p>
    <p>TODO List:</p>
    <p>- Pictures</p>
    <p>- 13</p>
    something
    <p>- Accounts</p>
</body>

你已经回滚并且没有冲突。 原因如下: 在Git中尝试还原时发生冲突


0

让我展示给你根本原因:

第一次输入时,光标在这里:<p>- 13</p>,然后你输入了“linefeed,new line, br”。

第二次输入时,你输入了<p>- Accounts</p>,Git实际上认为你删除了<p>- 13</p>并添加了新的<p>- 13</p>,所以第二次提交只包含这个内容:

<p>- 13</p>
<p>- Accounts</p>

当您撤销第一次提交时,Git会生成新的提交“撤销提交”。 第二次提交和“撤销提交”之间存在冲突。

解决方案A 实际上,在这种情况下,不需要使用撤销命令;只需手动删除即可。 解决方案B 按照zoul的答案操作

git revert:为什么会出现冲突? git revert:为什么会出现冲突?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接