Gitは署名/コメントタグをマージするときにマージコミットを生成しません。

Gitは署名/コメントタグをマージするときにマージコミットを生成しません。

署名またはコメント付きのタグをマージすると、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オプションを明示的に使用することです。

おすすめ記事