リテラル テキスト文字列が表示された場合:
HEAD detached at develop
(例:git status
出力)、これは nameがbranchdevelop
ではないことを意味します。(より正確には、これはブランチ名ではありません。Git では、「ブランチ」という用語はあいまいです。「ブランチ」とは正確には何を意味するのでしょうか? を参照してください) 。
たとえば、この Git の Git リポジトリで次のコマンドを実行すると、
$ git checkout v2.10.0
Note: checking out 'v2.10.0'.
[snip]
HEAD is now at 6ebdac1... Git 2.10
$ git status
HEAD detached at v2.10.0
nothing to commit, working tree clean
これは、名前v2.10.0
がブランチではなくタグであるためです。
master
(ブランチ名です)に戻るには、次のようにします。
$ git checkout master
Previous HEAD position was 6ebdac1... Git 2.10
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Git のブランチ名は、長い目で見ればそれほど重要ではありません。短期的には (作業中)、それらは重要で便利ですが、最終的には likefix-bug-1234
またはtest-new-feature
どちらかのブランチがうまくいき、長期にわたる開発またはリリース ブランチに組み込まれて削除されるか、またはそうであることが判明します。失敗し、完全に削除されるか、「マージを無視」して行き止まりとして終了し、その名前が削除されます。
重要なのはコミットです
Git では、本当に重要なのはコミット自体だけです。
ブランチ名は、単にコミットを見つける方法として機能します。タグ名も同様です。それぞれの名前により、Git は1 つのコミットを見つけることができます (名前には大きな醜いハッシュが格納されます) 6ebdac1...
。コミット自体により、Git は以前のコミットを見つけることができます。
ブランチ名とタグ名の主な違いは、ブランチ名は移動するはずであり、実際、ブランチで新しいコミットを行うと自動的に移動することです。そのために、ブランチを「オン」にして、実行時にブランチを移動することを Git が認識できるようにします。git checkout branch-name
git commit
他の名前は、Git はほとんどの場合、生のハッシュ ID の名前として扱います。これらにより、「切り離されたHEAD」が得られます。目的git status
のために、Git は、この「切り離された HEAD」状態に入るために使用した名前を記憶しようとします。しかし、本当に重要なのは ID です。
ブランチ名を削除すると、コミット自体はしばらく (通常は少なくとも 30 日間) 残ります。それらの ID は、Git の「reflogs」で見つけることができます。git reflog
実行すると、検索するのが難しい大量のものが取得されるため、これは一種のお尻の痛みです。しかし、コミットはまだそこにあります。気になるものを見つけて (たとえば、git show 08bb350
commit を参照するために使用します08bb350
)、それらを「復活」させるだけです。
$ git branch zombie 08bb350
たとえば、ブランチとして戻したいコミットが08bb350
.