git - 为什么 git revert 会产生冲突?

标签 git revert git-revert

我有以下提交

dd9e52bafac5fa427ed64c5d9cf08015fa804ed4 Added Line 3
a000427a4c70781d0bed7b31f56f290ac1d636b7 Added Line 2
20baa578ae205768639620749f53bd318e329e73 Added Line 1
7c043a104394ba4ba5a2fb29d4526de50b7d12be Created file.txt
  • 在提交 7c04 时,我创建了一个名为 file.txt
  • 的空白文件
  • 在提交 20ba 时,我将文本“第 1 行”添加到文件
  • 在提交 a000 时,我将文本“第 2 行”添加到文件
  • 在提交 dd9e 时,我将文本“第 3 行”添加到文件

  • 在提交 dd9e 时,file.txt 现在读取
    Line 1
    Line 2
    Line 3
    

    Head 和 master 指向最后一次提交 (dd9e)。

    如果我运行 git 命令
    git revert 20baa
    

    我被告知
    error: could not revert 20baa57... Added Line 1
    hint: after resolving the conflicts, mark the corrected paths
    hint: with 'git add <paths>' or 'git rm <paths>'
    hint: and commit the result with 'git commit'
    

    我不明白为什么会有冲突。

    在 VS Code 中查看冲突时,它显示以下内容
    git conflict

    我想要发生的事情

    我想撤消在提交 20baa 中所做的更改(即从文件中删除第 1 行)。我意识到我可以手动执行此操作然后提交更改,但我认为 git revert 是为了撤消更改?

    我误解了 git revert 的作用吗?

    最佳答案

    git revert查看原始提交中所做的更改,生成具有相反更改的差异,并尝试应用它。在您的情况下,Git 正在尝试应用此差异:

    -Line 1
     <nothing else in the file>
    

    当尝试将更改应用于任何差异的行时,如果该行或其两个相邻行从那时起发生了更改,Git 将引发冲突。这是 Git 用来猜测同一文件中的更改是否重要到足以打扰您的启发式方法。使用这种启发式方法,上述差异与文件的最新状态冲突,即:
    Line 1
    Line 2
    Line 3
    

    它拒绝删除第 1 行,因为下一行以前什么都没有,但现在是第 2 行。Git 认为这可能影响了第 1 行的含义。它不会让你在不确认后面添加的情况下删除第 1 行毕竟,第 2 行并没有使第 1 行变得更重要和值得保留。

    关于git - 为什么 git revert 会产生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49822262/

    相关文章:

    linux - Git:提交前快速查看差异

    git - 如何将GitFlow集成到现有项目中?

    git - 如何还原 `git fetch upstream; git merge upstream/master` ?

    git - 我如何撤消 Github 中的先前提交

    git - 为什么 git 的作者日期可能会停留在旧日期?

    git - `.gitignore` 文件中前导斜杠的含义

    java - 创建一个简单的 StringRevert 程序 - Java

    git - 还原暂存的更改,保留未暂存的更改

    git - 如何恢复使用 strategy=ours 的 merge ?

    git - .git/sequencer 目录是什么?