如何实现不允许的`git --no-ff --ff-only`

DrS*_*SAR 21 git merge rebase

作为我们的rebase-heavy工作流程的一部分,我希望在master分支上使用合并.特别是我想只在主题分支被重新定位到最近的主提交时合并,从而使任何合并成为快进合并.我可以通过使用:

git merge --ff-only

此外,我想记录主题分支与空提交的集成,这就是为什么我想使用--no-ff来强制该行为:

git merge --no-ff

但是,我真正想要的是两者的结合:只有当它微不足道时才合并但是让我记录它.Git认为

fatal: You cannot combine --no-ff with --ff-only.

对某些人来说,这显得不言而喻.

git merge --edit --no-ff topicbranch

没有实现我想要的行为.那么如果有问题的主题分支被重新定位到最新的主提交,我如何与--no-ff选项合并?


更新:看起来Charles Bailey的回答可以解决问题.如果你想把它变成一个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!"'
Run Code Online (Sandbox Code Playgroud)

有点满口但有效.请注意使用选项编辑提交消息的强制--edit.

CB *_*ley 10

你不想要,--ff-only因为你确实想要进行一个--ff-only会抑制的合并提交.

在运行merge命令之前,可以将所需的检查作为单独的检查.您可以将其打包成一个简单的shell函数.

例如

merge_if_ahead () {
  if test "$(git merge-base HEAD "$1")" = "$(git rev-parse HEAD)"; then
      git merge --no-ff "$1"
  else
      echo >&2 "Not up to date; refusing to merge"
      return 1
  fi
}
Run Code Online (Sandbox Code Playgroud)