还原合并提交时 1 和 2 的意义
Posted
技术标签:
【中文标题】还原合并提交时 1 和 2 的意义【英文标题】:Significance of 1 and 2 while reverting merge commit 【发布时间】: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 个父节点,数字表示要还原的父节点 【参考方案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
【讨论】:
以上是关于还原合并提交时 1 和 2 的意义的主要内容,如果未能解决你的问题,请参考以下文章