官方的说明是,没有 -m 参数,git 就不知道以哪个 parent 为基础进行 diff 并 revert。
但是执行 merge 操作的时候,肯定是在某个分支下进行的,比如在 A 分支下,执行 git merge B,显然是把 B 分支合并到 A 分支
那么理所当然的,在 A 分支 revert 这次 merge 时,parent 当然是 A 分支的上次提交,也就是-m 1。所以不知道-m 这个参数,除了 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。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。