当我合并签名或带注释的标签时,我期望 Git 创建合并提交,但它会快进分支指针。我在 openSUSE Tumbleweed 上使用 Git 版本 2.17.0。
根据git-merge(1)
它的手册页,在合并签名/注释标签的情况下应该创建合并提交:
--无-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
确实导致快进合并,而不是创建合并提交。我用带符号的标签而不是带注释的标签观察到了同样的意外行为。
我的假设是错误的吗?难道我做错了什么?解决方案是什么?
答案1
请注意您引用的联机帮助页中我在下面用粗体显示的部分:
这是合并带注释(可能还有签名)标签时的默认行为没有存储在 refs/tags/ 层次结构中的自然位置。
使用您给出的命令序列,标签会处于其自然位置,因此该默认值的条件不适用。
设置此默认值是为了帮助从贡献者存储库中获取标签,就像FETCH_HEAD
在维护者的存储库中一样。此类标签可能是短暂的,因此如果它们具有内容(注释和/或签名),通常最好在合并提交中保留该信息。但是,已经存在的标签refs/tags/
可能是项目永久状态的一部分,因此内容应该保持可用,而不需要转移到提交。
最简单的解决方案可能是显式使用该--no-ff
选项。