作为我们重基工作流程的一部分,我希望在主分支上使用合并。特别是,我只想在主题分支被重新基于最近的主提交时进行合并,从而使任何合并都成为快速提交。我可以通过以下方式实现这一点:
git merge --ff-only
此外,我想记录主题分支与空提交的集成,这就是为什么我想使用--no-ff来强制这种行为:
git merge --no-ff
不过,我真正想要的是两者的结合:只有在琐碎的情况下才合并,但无论如何让我记录一下。吉特认为
fatal: You cannot combine --no-ff with --ff-only.
这在某些人看来是不言而喻的。
git merge --edit --no-ff topicbranch
也不能达到我想要的行为。那么,当所讨论的主题分支被重新基于最新的主提交时,我如何与--无-ff选项合并呢?
最新消息:看来查尔斯·贝利的回答会奏效。如果您希望将其转换为git别名,您可以在这里发出以下命令:
git config --global alias.integrate '!test "$(git merge-base HEAD "$1")" = "$(git rev-parse HEAD)" && git merge --no-ff --edit $1 || echo >&2 "Not up-to-date; refusing to merge, rebase first!"'有点口香糖,但很管用。注意使用选项--edit编辑提交消息的力度。
发布于 2013-03-26 10:37:14
我已经为我的简单测试创建了一个别名
git config --global alias.ffmerge '!sh -c "git merge --ff-only $1 && git reset --hard HEAD@{1} && git merge --no-ff $1" -'它由三个命令组成,一个接一个,一旦第一个命令失败,就会失败。解释每一项:
git merge --ff-only $1如果合并不能作为快速转发合并继续,则将失败。($1是作为参数传入的分支名称)
git reset --hard HEAD@{1}如果第一个命令成功,这意味着我们可以进行一个快速转发合并,但是当我们想要进行合并提交时,我们将返回到(成功的)合并之前的HEAD状态。HEAD@{1}是一个reflog指针。
git merge --no-ff $1现在,我们将使用合并提交来完成真正的合并,即使合并可以作为一个快速向前处理。
对git ffmerge的简单调用将为我们完成整个任务,唯一可能失败的步骤是第一步,这将使我们像以前一样处于一个不变的工作副本中。
与git reset --hard一样,工作副本应该是干净的。
发布于 2017-03-10 12:04:36
git config alias.mff '!mff() { git merge --ff-only "$1" && git reset --hard HEAD@{1} && git merge --no-ff "$1"; }; mff'从那以后
git mff other-branchhttps://stackoverflow.com/questions/15631890
复制相似问题