1

我正在将来自稳定分支的更改合并回开发分支。我希望它是一个“真正的”合并,我的意思是当我这样做时它应该显示一个合并git --graph --oneline

问题是,我不想提交来自分支的所有消息,而只是提交我的合并提交消息。(我们开发人员的提交消息必须符合特定模式,由远程挂钩强制执行,但分支上的一些提交来自“发布”用户,不必符合也不需要。)

有没有一种方法可以在不从分支推送提交消息的情况下执行“真正的”合并?

这是我目前的合并方式(来自大师):

git merge -s recursive -X ours --no-commit 1.0_BRANCH

这是我提交后的(经过清理的)图表的样子,这正是我想要的:

*   b3492a7 - (HEAD, master) DEV-3: Merging patch fix onto master <graham>
|\  
| * eec2ef6 - (origin/1.0_BRANCH, 1.0_BRANCH) [maven-release-plugin] prepare for next development iteration <release>
| * c14dee4 - (application-1.1) [maven-release-plugin] prepare release application-1.1 <release>
| * 40687a4 - DEV-3: Fix to go into the patch <graham>
| * 4e71c98 - [maven-release-plugin] prepare for next development iteration <release>
| * c8828bb - (application-1.0) [maven-release-plugin] prepare release application-1.0 <release>
| * 46a9a59 - [maven-release-plugin]  copy for branch 1.0_BRANCH <release>
* | 5ca3ec6 - (origin/master, origin/HEAD) DEV-2: First feature commit of next release <graham>
* | bd797d3 - [maven-release-plugin] prepare for next development iteration <release>
|/  
* afff00f - [maven-release-plugin] prepare branch 1.0_BRANCH <release>
* b9329fb - DEV-1: Last feature commit before release <graham>

我的问题是当我尝试推送时,我们的远程钩子拒绝推送,因为提交消息eec2ef6不符合并且我不是发布用户。我可以仅使用来自 的消息推送我的合并b3492a7,还是必须压缩合并(我相信这意味着图表不会将其显示为合并)?

4

2 回答 2

2

如果远程不知道提交的所有父项,您就无法推送合并。

您要么必须压缩,正如您猜测的那样,这将破坏该分支的历史并合并,或者理想情况下,您可以更改远程 git 挂钩,使其对拒绝的内容更加智能。也许它可以忽略来自“发布”用户的所有提交。

于 2012-11-03T12:19:19.927 回答
0

您当前的模型似乎意味着只有用户 ' release' 可以合并回一个功能分支dev;这是不切实际的,因为只有开发人员才能正确管理这样的合并。

如果您可以改进钩子,您可以使用类似于“让远程 git 存储库拒绝在推送时合并提交”中提出的算法:
通过使用git rev-list --parents <OLD>..<NEW>,您可以确定其中一个父级是否包含<release>在其中,并选择允许那。

于 2012-11-05T07:51:41.273 回答