开发者社区> 问答> 正文

一直不理解 git revert merge 时,为什么一定要加-m 参数

官方的说明是,没有 -m 参数,git 就不知道以哪个 parent 为基础进行 diff 并 revert。

但是执行 merge 操作的时候,肯定是在某个分支下进行的,比如在 A 分支下,执行 git merge B,显然是把 B 分支合并到 A 分支

那么理所当然的,在 A 分支 revert 这次 merge 时,parent 当然是 A 分支的上次提交,也就是-m 1。所以不知道-m 这个参数,除了 1 之外的使用场景是什么呢(既然必须有这个参数,应该是有用的吧)

展开
收起
Puppet 2019-12-06 09:33:22 1272 0
1 条回答
写回答
取消 提交回答
  • 首先,你怎么知道哪个提交是 A 分支的上次提交?

    -m 1 就是告诉 git,第一个提交是 A 分支的上次提交。如果是-m 2,就是告诉他第二个提交才是 A 的上次提交

    比如说有一个公共 Base A,然后一条分支上有 B,一条分支上有 C,这两条分支合并成了 D。

    即 D = git-merge(B, C)。

    这里 B 就是-m 1,C 就是-m 2。

    如果你在合并的时候,让 C 在前,就会变成

    D1 = git-merge(C, B)。

    这里 D 和 D1 的区别就只有元数据中两个 parent 的顺序。

    所以如果 A 是原始代码,B 和 C 各是一个补丁,而 D 是当前分支的时候,如果你要 revert D,自然会有取消 C 和取消 B 两种需求,也自然会需要-m 1 和-m 2。

    2019-12-06 09:33:53
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
新一代高效Git协同模型 立即下载
AGit-Flow:新一代高效Git协同模型 立即下载
AGit-flow:新一代高效Git协同模型 立即下载

相关实验场景

更多