0

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

如果在功能中发现错误,该分支将从开发中恢复,这使得弄清楚最终进入 master 的内容有点困难。

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

更新:

这里的答案,我可以得到一些接近的东西:

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

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

4

1 回答 1

1

你的历史是怎样的,你想做什么?根据您的描述,我目前的理解是:

M您的development分支中有来自分支的错误合并提交topic(heads commits: 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)并反思这场灾难。

于 2013-06-07T20:38:03.303 回答