创建开发中存在的合并提交列表,但不在master中

时间:2013-05-20 09:58:44

标签: git

我们的git流程涉及将功能合并到开发中,从功能分支合并,当稳定时,这些功能将合并为主。

如果在某个功能中发现了一个错误,那么该分支将从开发中恢复,这样就很难弄清楚最终会进入主控的内容。

我在想一个简单的shell脚本来生成一个合并列表(没有被还原),这些合并列表正在开发中,但不是在master中,但是无法弄清楚如何生成它。我知道可以使用基本的git和bash来完成,所以任何指针都会非常感激。

更新

从答案here开始,我可以得到以下内容:

git rev-list release_2013_05_20 --not master --merges | xargs -L1 git name-rev | grep -oE '[0-9a-f]{40}\s[^\~\^]*'

但如果某个功能被还原,则会显示多个条目,然后再次合并。

1 个答案:

答案 0 :(得分:1)

您的历史形态是什么,您想做什么?根据您的描述,到目前为止我所理解的是:

来自M分支的development分支中有一个错误的合并提交topic(负责人提交:AB):

 ---o---o---o---M---x---x
               /
       ---A---B

并使用$ git revert -m 1 M还原它以获取此信息:

 ---o---o---o---M---x---x---W
               /
       ---A---B

然后,您对topic分支和development分支进行了更多更改:

 ---o---o---o---M---x---x---W---x
               /
       ---A---B-------------------C---D

当您认为它成熟时,将其合并为development M2

 ---o---o---o---M---x---x---W---x---M2
               /                     \
       ---A---B-------------------C---D

现在,您想要查找没有相应M提交的所有W提交,对吗? 方式(假设完全通用)是实际获取M的补丁文本并验证它是W的补丁文本的反转。因为W只是一个常规提交,所以你必须遍历每一个提交,并将它与整个分支中的每个提交进行比较。你怎么处理这个clusterfuck?

---o---o---o---M1---x---x---M2---x---x--W1---M3---x---W3---x
               /             \                \
       ---A---B-----------C---D------------E---F

我是否确凿地证明您的工作流程已经破裂,您必须改变方式?现在去阅读gitworkflows(7)并反思这场灾难。