我正在将来自稳定分支的更改合并回开发分支。我希望它是一个“真正的”合并,我的意思是当我执行git --graph --oneline时,它应该显示一个合并。
问题是,我不想提交来自分支的所有消息,而只想提交我的合并提交消息。(我们开发人员的提交消息必须符合特定的模式,由远程钩子强制执行,但分支上的一些提交来自不需要遵守的“发布”用户。)
有没有一种方法可以在不从分支推送提交消息的情况下执行“真正的”合并?
下面是我目前的合并方式(来自master):
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中的提交消息不一致,而我不是release用户。我是否可以仅使用来自b3492a7的消息来推送合并,或者必须压缩合并(我相信这意味着图形不会将其显示为合并)?
发布于 2012-11-03 20:19:20
如果遥控器不知道提交的所有父项,则无法推送合并。
您要么必须压缩,正如您猜测的那样,这将破坏该分支的历史并合并,或者理想情况下,您可以更改您的远程git钩子,使其在拒绝的内容方面更智能一些。也许它可以忽略来自“release”用户的所有提交。
发布于 2012-11-05 15:51:41
你当前的模型似乎意味着只有用户'release‘才能将一个功能分支合并回dev;这是不现实的,因为只有开发人员才能正确地管理这样的合并。
如果你能改进钩子,你可以使用类似于“Have remote git repository refuse merge commits on push”中介绍的算法:
通过使用git rev-list --parents <OLD>..<NEW>,您可以确定其中一个父级是否包含<release>,并选择允许这样做。
https://stackoverflow.com/questions/13209077
复制相似问题