【发布时间】:2016-06-28 00:40:53
【问题描述】:
狐步舞合并是一种合并,其中'origin/master'作为第二个(或更高的)父级合并,如下所示:
Commit 'D' 是一个 foxtrot 合并,因为 'origin/master' 是它的第二个父级。请注意,此时来自“origin/master”的第一父级历史记录如何包含提交“B”。
但在我的 git repo 中,我需要所有涉及“origin/master”的合并,以将“origin/master”保持为第一个父级。不幸的是,git 在评估提交是否有资格进行快进时并不关心父顺序。这会导致我的主分支上的第一个父历史记录有时会丢失曾经存在的提交(例如,“git log --first-parent”的输出)。
当从早期图表中推送提交“D”时会发生以下情况:
如何防止这种推送?在推送 foxtrot 合并后,“origin/master”的第一父级历史不再包含提交“B”!
显然没有提交或工作实际上丢失,只是在我的环境中我真的需要“git log --first-parent”作为提交的稳定累积记录 - 如果你愿意,一种“Write-Once”多读”(WORM)数据库。我有使用“git log --first-parent”的脚本和流程来生成变更日志和发行说明,以及在我的票务系统 (JIRA) 中管理票证转换。 Foxtrot 合并正在破坏我的脚本!
是否可以在我的 git 存储库中安装某种预接收挂钩以防止 foxtrot 合并被推送?
附言此 stackoverflow 问题中的提交图是使用 http://bit-booster.com/graph.html 生成的。
【问题讨论】:
-
我很好奇这个“狐步舞合并”的术语是从哪里来的……
-
为什么只是
master分支?我认为这适用于任何分支。 -
是的,它适用于所有分支。我花了几个月的时间才意识到这一点。