我们的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[^\~\^]*'
但如果某个功能被还原,则会显示多个条目,然后再次合并。
答案 0 :(得分:1)
您的历史形态是什么,您想做什么?根据您的描述,到目前为止我所理解的是:
来自M
分支的development
分支中有一个错误的合并提交topic
(负责人提交:A
,B
):
---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)
并反思这场灾难。