【问题标题】:Significance of 1 and 2 while reverting merge commit还原合并提交时 1 和 2 的意义
【发布时间】:2017-07-06 18:58:41
【问题描述】:

我遇到了一种情况,我需要在 git 中恢复我的一个合并提交。我使用了以下命令:

git revert -m 1 [merge commit id]

现在 git 为上述命令提供了另外一种选择,如下所示:

git revert -m 2 [merge commit id]

我不明白 1 和 2 之间的区别

使用的参考:https://www.christianengvall.se/undo-pushed-merge-git/

【问题讨论】:

  • 一次合并提交主要有 2 个父节点,数字表示要还原的父节点

标签: git git-merge git-revert


【解决方案1】:

git revert 文档提供了类似的语法

git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>…​

所以这里-m后面的数字代表父编号

一个合并提交可能有两个父母说考虑一个例子,你当前的哈希是0ce2ca0b35f59af267241cf4d40d16a3e13ba6f3

并且有两个父母

df1acf5f54426d30f12c6b4558c3dd922297aae3
e19b912404ffd3c153ccac3072dbf22396896d2a

git revert -m 2 0ce2ca0b35f59af267241cf4d40d16a3e13ba6f3

将恢复为e19b912404ffd3c153ccac3072dbf22396896d2a

Documentation

【讨论】:

    【解决方案2】:

    一个 git 存储库只是一个提交树。合并提交只是具有两个(或更多)父级的提交。

    如果您还原单个父项的提交,那么您只是撤消了该提交引入的更改。

    但是,如果您要恢复合并提交,则需要恢复合并到的分支中的所有更改。但是,对于哪个分支合并到哪个分支没有真正的概念 - 您只有提交,-m 告诉 git 您要将哪个父级恢复到(即撤消从另一个父级引入的更改)

    在此处查看文档:https://git-scm.com/docs/git-revert#git-revert--mparent-number

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2012-10-19
      • 2012-12-29
      • 1970-01-01
      • 2021-07-29
      • 2012-06-06
      相关资源
      最近更新 更多