Git - 如何查找可能包含已还原的提交的分支?

时间:2016-04-07 18:28:14

标签: git version-control merge git-flow

我们最近从Git切换到SVN(使用gitflow),我正在整理一些检查,以确保在公共分支上完成的任何恢复也会在从所述公共分支机构切下来的分支机构可能已经收回了要恢复的提交。

以下简单示例。 f1从提交X处的开发中删除。提交A,B和C在f1上进行,并且f1被合并回到在提交Y中开发.f2从提交Z处的开发中删除。提交D和E是在f2上制作。通过使用'git revert -m1'恢复f1合并提交,不会在开发时恢复来自f1的所有更改。现在,如果将f2合并为开发,它仍将包含来自f1的更改,并将它们添加回开发。

                               |reverts f1 
 develop-> X---o---o---Y---Z---R---P <- merge f2 to develop picks up f1
            \         /     \     /
        f1-> A---B---C  f2-> D---E

我一直在使用'git branch -r --contains'来查找包含此提交的任何其他分支。

我想知道的是,我怎样才能做得更好?我如何以编程方式检查可能包含来自f1的提交的任何其他分支?有没有办法自动恢复其他分支机构的提交?基本上,我需要确保f1不能通过任何其他分支(如f2在恢复之前获取f1提交)来重新开发。

编辑:为了最终将f1提交合并到修改添加到分支后开发,我将重新设置为A,B,C以及修复提交创建新提交。因此,在rebase f1之后会有A',B',C'和修复提交F和G.

1 个答案:

答案 0 :(得分:0)

嗯,在你的例子中,没有必要将R分支到f2。您不合并E中的文件的状态,但您合并了在f2中完成的更改。所以A,B和C仍将被排除在P而没有R被挑选到f2。

为了证明这一陈述,这里有一个命令链,它可以准确地重现你的场景,你可以执行和审查:mkdir test && cd test && git init && git checkout -b develop && touch X && git add X && git commit -m X && git branch f1 && touch o1 && git add o1 && git commit -m o1 && touch o2 && git add o2 && git commit -m o2 && git checkout f1 && touch A && git add A && git commit -m A && touch B && git add B && git commit -m B && touch C && git add C && git commit -m C && git checkout - && git merge f1 -m Y && touch Z && git add Z && git commit -m Z && git checkout -b f2 && touch D && git add D && git commit -m D && touch E && git add E && git commit -m E && git checkout - && git revert HEAD~ -m 1 -n && git commit -m R && git merge f2 -m P && gitk