【问题标题】:How does git revert worksgit revert 是如何工作的
【发布时间】:2020-12-31 22:49:54
【问题描述】:

我有一个包含以下提交历史的文件:

$git log --oneline
49740e5 3: Third version
796a330 2: Second version
539aa76 1: First version
647d060 file C creation

在每个版本中,我只是在我的文件中添加了一个文本字符串。 我虽然如果我恢复 "796a330 2: Second version" git 会自动生成一个恢复提交 我会得到这样的东西:

3: Third version
1: First version
file C creation

但实际上这个动作不是自动的,我有一个合并冲突需要解决。为什么?

【问题讨论】:

  • manual 对此进行了解释:注意:git revert 用于记录一些新的提交,以逆转一些早期提交的效果(通常只是一个错误的提交)。如果你想丢弃工作目录中所有未提交的更改,你应该看到 git-reset
  • 这能回答你的问题吗? Git revert causes merge conflict
  • 这能回答你的问题吗? git revert: Why do I get conflicts?

标签: git


【解决方案1】:

使用git revert 796a330796a330 2 不会从日志中消失。相反,会创建另一个提交,尝试将 796a330 2 的反向补丁应用到 49740e5 3

关于冲突,这里有一个例子。假设539a76 1 C 为空。然后在796a330 2 中添加一行hello\n。然后在49740e5 3 中,该行被替换为world\n

796a330 2的补丁是从无到有hello\n49740e5 3的补丁是从hello\nworld\n796a330 2 的反转补丁从 hello\n 变为空。当将反向补丁应用到49740e5 3 时,在C 中找不到hello\n,因为C 只有world\n。所以它会报告冲突。

换句话说,49740e5 3 的变化依赖于796a330 2 的变化。如果您想恢复796a330 2 的更改而不发生冲突,您需要先恢复49740e5 3。如果两组变化是独立的,git revert 796a330在这种情况下不会引起冲突。

冲突不是错误。您可以通过保留您想要的代码并删除您不需要的代码来解决它们。应始终删除冲突的标记。

【讨论】:

    【解决方案2】:

    从技术上讲,它使用用于合并的同一台机器,除了使用 a late "common" ancestor 作为合并 2 个分支的基础,它使用您要求还原的修订作为合并和父级的基础就像是the other branch。消息是一个模板,讨论正在恢复的内容......当然,冲突与合并具有不同的“含义”。

    http://ezconflict.com/en/conflictsse12.html#x53-890001.7

    完全披露:我的材料(没有货币化、没有 cookie、没有跟踪)

    【讨论】:

      【解决方案3】:

      git revert 命令实际上是通过向您的分支的 HEAD 添加一个 new 提交来实现的,该提交在功能上撤消了您提到的任何提交。所以,你调用git revert 后的历史实际上是这样的:

      $ git log --oneline
      abcdefg revert 796a330
      49740e5 3: Third version
      796a330 2: Second version
      539aa76 1: First version
      647d060 file C creation
      

      现在您的分支应该表现得好像根本没有提交过 796a330 一样。使用这种方法来恢复提交的一个原因是它避免了重写你的历史。请注意,您可以也可以使用类似交互式 rebase 的方式从字面上删除/删除 796a330 提交。但是,这将要求强制推送您的分支,这反过来可能会给已签出并使用具有较旧历史版本的分支的任何其他人带来问题。

      【讨论】:

        猜你喜欢
        • 2019-12-28
        • 1970-01-01
        • 2019-08-31
        • 2011-07-21
        • 1970-01-01
        • 2015-09-02
        • 1970-01-01
        • 2016-12-31
        • 2017-08-30
        相关资源
        最近更新 更多