Git では、ブランチはコミットへの単なるポインターであり、そのブランチに新しいコミットが追加されると移動します。つまり、ポインターが移動すると、以前のコミットがそのブランチにあったという記憶はありません。これは、最初は頭に浮かぶのが難しい概念でした。「ブランチ」という名前は、エッジで接続された複数のノードを思い浮かべますが、Git では、ブランチは実際にはノードへの移動ポインターにすぎません。
git log
それらを指しているブランチでコミットに忠実に注釈を付けます。たとえば、ブランチ マスターにコミット "one"、"two"、"three" を、ブランチ フィーチャーに "uno"、"dos"、"tres" をコミットしてリポジトリを作成し、フィーチャーをマスターにマージし直しました。ブランチを削除する前に、次のことgit log
がわかります。
* 9eb6e93 (HEAD, master) Merge branch 'feature'
|\
| * 523e2ac (feature) tres
| * 6d3cc0f dos
| * 1bc0b2e uno
* | d39734b three
* | 779d37b two
* | facbcbf one
|/
* 58848f4 Initial commit.
"(feature)" アノテーションが何らかの形で右側のブランチを参照していると思い込んでしまうのは簡単ですが、そうではありません。単に commit を参照しているだけ523e2ac
です。
デフォルトでは、Git がマージ コミットを作成すると (9eb6e93
この場合)、ブランチの「機能」をマージしていることを示すコメントが自動的に追加されるため、そこにブランチがあったという記録がいくつかあることに注意してください。ただし、それは単なるコメントです。 、 これ以上何もない。
ブランチ「機能」を削除すると、コミット523e2ac
に「(機能)」というラベルが付けられなくなったこと以外は何も変わりません。
* 9eb6e93 (HEAD, master) Merge branch 'feature'
|\
| * 523e2ac tres
| * 6d3cc0f dos
| * 1bc0b2e uno
* | d39734b three
* | 779d37b two
* | facbcbf one
|/
* 58848f4 Initial commit.
したがって、あなたの質問に答えるには、いいえ、ブランチを削除するgit log
と、そのブランチ名でコミットに注釈を付けることはできません (もう存在しないため)。ただし、いくつかの代替手段があります。
ブランチを削除しないでください。ブランチを残しても害はありませんが、タイプすると画面が乱雑になりますgit branch
。また、ブランチ名を再利用することもできます。ブランチを削除しないと、後で問題が発生する可能性があります。
ブランチを削除する前にコミットにタグを付けます。タグは、実際には動かない枝です。タグ名をブランチ名と同じにすることもできます。
マージ コミットの自動コメント機能に満足してください。前述のように、Git がマージを行うとき、デフォルトでは、コミット コメントでマージされるブランチの名前を参照し、ブランチが存在したという記録を作成します。私にとって、これは Git でのブランチの動作に基づいた最もクリーンなソリューションです。ブランチは実際には一連のコミットを参照するわけではないため、ブランチが存在したのは歴史的な結果にすぎません。
ブランチの履歴が残る可能性があるもう 1 つの場所は、reflog です。これは、どのブランチに切り替えているか、またはどのブランチから切り替えているかを単に記録するだけです。ほとんどの場合、災害復旧のためにあります (おっと、そのブランチを削除するつもりはありませんでした!)、あなたが話している種類のブランチ履歴にはあまり役に立ちません。