我希望 Git 在我合并签名或带注释的标签时创建合并提交,但它会快进分支指针。我在随附的 openSUSE Tumbleweed 上使用 Git 2.17.0 版本。
根据它的手册页,git-merge(1)
在合并签名/注释标签的情况下应该创建一个合并提交:
--no-ff即使合并解析为快进,也创建合并提交。这是合并未存储在 refs/tags/ 层次结构中的自然位置的带注释(可能还有签名)标签时的默认行为。
我发出的命令序列如下所示:
git init foobar
cd foobar
git commit --allow-empty -m 'Empty root commit'
git checkout -b feature
git commit --allow-empty -m 'Feature one commit ahead of master'
git tag -a -m 'Feature ready for non fast-forward merge' ready-to-merge-feature
git checkout master
git merge ready-to-merge-feature
不幸且出乎意料的是,注释标签的合并ready-to-merge-feature
确实会导致快进合并而不是创建合并提交。我在使用带符号而不是带注释的标签时观察到了同样的意外行为。
我的假设是错误的吗?难道我做错了什么?什么是解决方案?
请注意您引用的联机帮助页中我在下面加粗的部分:
使用您提供的命令序列,标签将位于其自然位置,因此该默认条件将不适用。
这个默认设置是为了帮助从贡献者存储库中获取标签,就像
FETCH_HEAD
在维护者的存储库中一样。此类标签可能是短暂的,因此如果它们具有内容(注释和/或签名),通常最好在合并提交中保留该信息。但是,已经存在的标签refs/tags/
很可能是项目永久状态的一部分,因此内容应该保持可用,而无需转移到提交。最简单的解决方案可能是显式使用该
--no-ff
选项。