180

私は自分の git プロジェクトのデプロイ スクリプトを開発しており、タグの使用を開始したばかりです。という新しいタグを追加しましたv2.0:

git tag -a v2.0 -m "Launching version 2.0"

このタグをリモートリポジトリにプッシュしました

git push --tags

v2.0デプロイ スクリプトを実行してタグをチェックアウトしようとすると、次のメッセージが表示されます。

あなたは「切り離された頭」の状態にあります。周りを見回して、実験的な変更を加えてコミットすることができます。また、別のチェックアウトを実行することで、ブランチに影響を与えることなく、この状態で行ったコミットを破棄できます。作成したコミットを保持するために新しいブランチを作成する場合は、checkout コマンドで -b を再度使用して (現在または後で) 行うことができます。例: git checkout -b new_branch_name HEAD は現在

それは正常ですか?私が行う場合:

git branch

私はこの出力を得る:

* (no branch)
  master

これが明らかである場合は申し訳ありませんが、私はそれを理解できませんでした。

4

2 に答える 2

460

わかりました、最初のいくつかの用語は少し単純化しすぎています。

ではgittag(他の多くのものと同様に) はtreeishと呼ばれるものです。これは、プロジェクトの歴史のある時点を参照する方法です。Treeishes は、タグ、コミット、日付指定子、序数指定子、または他の多くのものにすることができます。

はタグのようになりましたbranchが、移動可能です。ブランチを「オン」にしてコミットすると、ブランチは作成した新しいコミットに移動され、現在の位置が示されます。

HEAD「現在」と見なされるブランチへのポインタです。通常、リポジトリのクローンを作成すると、 はコミットを指し示しますHEADmaster次にのようなことをすると、別のコミットを指している可能性のあるブランチを指すようgit checkout experimentalに を切り替えます。HEADexperimental

では説明です。

を実行するgit checkout v2.0と、 が指していないコミットに切り替わりますbranch。はHEAD「分離」され、ブランチを指していません。今すぐコミットすることに決めた場合 (そうかもしれませんが)、このコミットを追跡するために更新するブランチ ポインターはありません。別のコミットに戻すと、作成したこの新しいコミットが失われます。それがメッセージがあなたに伝えていることです。

通常、あなたができることは言うことですgit checkout -b v2.0-fixes v2.0。これにより、treeish v2.0(この場合はタグ) が指すコミットに新しいブランチ ポインターが作成され、それHEADを指すようにシフトされます。これで、コミットを行うと、(ブランチを使用して) それらを追跡することが可能になり、v2.0-fixes通常どおりに作業できます。v2.0特にコードを確認したいだけの場合は、行ったことに「問題」はありません。ただし、追跡したい変更をそこに加えたい場合は、ブランチが必要になります。

git の DAG モデル全体を理解するには、ある程度の時間を費やす必要があります。驚くほどシンプルで、すべてのコマンドが非常に明確になります。

于 2011-04-07T14:01:55.230 に答える
13

はい、正常です。これは、ヘッドを持たない単一のコミットをチェックアウトするためです。特に、それは (遅かれ早かれ) どのブランチのヘッドでもありません。

しかし、通常はその状態で問題ありません。これにより安全に感じる場合は、タグから新しいブランチを作成できます:)

于 2011-04-07T13:56:11.000 に答える