Git 使用主线父编号还原合并

Git 使用主线父编号还原合并,git,Git,git中的主线父编号是什么? 当我恢复合并时,使用log(合并之前),我认为它将恢复f1分支,但它同时恢复f1和f2 commit f932068caca9b25fc5b68b25b907a7fb39250510 (HEAD -> master) Merge: 2a5ca98 4e171d0 6bdcc66 Merge branches 'f1', 'f2' and 'f3' commit 6bdcc66e5556250ae1174257fbdf426aba0bfc2b (f3

git中的主线父编号是什么? 当我恢复合并时,使用log(合并之前),我认为它将恢复f1分支,但它同时恢复f1和f2

commit f932068caca9b25fc5b68b25b907a7fb39250510 (HEAD -> master)
Merge: 2a5ca98 4e171d0 6bdcc66

    Merge branches 'f1', 'f2' and 'f3'

commit 6bdcc66e5556250ae1174257fbdf426aba0bfc2b (f3)

    f3 file added

commit 4e171d0e9cf81c092879418e17ba5d515c7dc332 (f2)

    1st commit in f2

commit 2a5ca9806fc0922a013d2e1484c19ac3ea0a23b3 (f1)

    1st commint in f1

commit 0a9eee7e8d1750d6a2ae2b93347144f3a42ae70d

1st commit in master
回复后,我得到如下结果:

$ git revert f932068 -m 3
[master 23b0313] Revert "Merge branches 'f1', 'f2' and 'f3'"
 2 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 f1file
 delete mode 100644 f2file

为什么它同时恢复f1和f2分支合并?在这里,-m3意味着什么?

似乎您的提交
合并分支'f1',f2'和'f3'
是一个(非常罕见的!)八位合并,即您通过一次提交将多个分支合并到
主分支中。虽然git能够做到这一点,但实际上您失去了恢复其中任何部分的能力

然后:
git revert
不会删除提交,它只是创建一个额外的提交,该提交会撤消由其他更改引入的更改。默认情况下(有代码> Git帮助回复< /COD>帮助指出),<代码> Reuts不能恢复合并提交,因为它不知道源代码(通常为2,但在您的情况下为4)源中的哪一个会考虑您要返回的“以前”状态。

在您的情况下,指定
-m3
将合并父级3(即分支
f3
)指定为要恢复到的“主线”:

Merge: 2a5ca98 4e171d0 6bdcc66
       ^       ^       ^
Parent 1       2       3
这样,您的命令指示git恢复父级1和2引入的更改,而不是父级3引入的更改,从而使您对
f3
的更改保持不变