【问题标题】:How to verify if GIT branch can be merged fast-forward only without actual merging?如何验证 GIT 分支是否只能在没有实际合并的情况下快速合并?
【发布时间】:2016-12-23 06:25:42
【问题描述】:

我试图找到 GIT 命令与仅快进选项合并并自动创建合并提交,但 --ff-only 不创建自动提交。

由于我想确保我只能快进并在合并后创建提交。

不幸的是,这些命令无法帮助我解决这个问题。 - --ff-only,进行快进合并但不创建提交 - --no-ff,创建自动提交,但如果不能应用快进则不停止合并。

因此,我试图找到任何可以验证它是否可以快速合并然后与自动提交合并的命令。

请给我一些建议。

非常感谢。

【问题讨论】:

  • 如果你真的只想快进目标分支,那么也许你应该考虑在目标上重新定位该功能。这将确保您只能快进。

标签: git merge


【解决方案1】:

如果您只想快进合并,并且确实想要合并提交,那么以下方法似乎可行,尽管这听起来自相矛盾:

git merge [branch] --ff-only --no-ff

它起作用的原因是--no-ff 实际上意味着“即使合并解析为快进,也创建一个合并提交”。这并不意味着“不执行快进”。

【讨论】:

  • 非常感谢,我已经测试过了,效果很好。
【解决方案2】:

如果当前分支中没有其他分支中尚未存在的修订,则从另一个分支合并将导致快进。一种检查方法:

git rev-list other..

注意另一个分支名称后面的..,这很重要。

如果输出为空,则在此分支中没有提交不在other 中,git merge other 将导致快进。

或者,正如@torek在评论中所写,对于shell脚本测试,使用git merge-base --is-ancestor的状态结果:

if git merge-base --is-ancestor HEAD foo; then
    echo merging foo can be done by advancing to foo without a merge
else
    echo merging foo would require a merge commit
fi

【讨论】:

  • 或者,对于shell脚本测试,使用git merge-base --is-ancestor的状态结果:if git merge-base --is-ancestor HEAD foo; then echo merging foo can be done by advancing to foo without a merge; else echo merging foo would require a merge commit; fi
  • 谢谢@torek,补充说
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
相关资源
最近更新 更多