[解決済み] Gitタグのチェックアウトで "detached HEAD state "になってしまう
質問
gitプロジェクトのデプロイメントスクリプトを開発していて、タグを使い始めたところです。新しいタグとして
v2.0
:
git tag -a v2.0 -m "Launching version 2.0"
そして、このタグをリモートリポジトリにプッシュしました。
git push --tags
デプロイスクリプトを実行し、チェックアウトしようとすると
v2.0
タグを使用すると、次のようなメッセージが表示されます。
あなたは「detached HEAD」状態です。見て回ったり、実験的な変更を加えてコミットしたり、コミットを破棄したりすることができます。 を実行することで、どのブランチにも影響を与えずに、この状態で行った 別のチェックアウトを行う。新しいブランチを作成してコミットを保持したい場合 を作成した場合は、(現在でも後でも)チェックアウト コマンドを再度実行します。例: git checkout -b new_branch_name HEAD は現在、以下のとおりです。 で
これって普通?とするとリポジトリが手詰まりになるので。
git branch
このような出力が得られます。
* (no branch)
master
当たり前のことですが、わからなかったらすみません。
どのように解決するのですか?
さて、まずは少し簡略化された用語について。
で
git
, a
tag
(他の多くのものと同様に) は、いわゆる
ツリー状
. これは、プロジェクトの歴史におけるある一点を参照する方法です。Treeishesは、タグ、コミット、日付指定、序数指定、その他多くのものになります。
今度は
branch
はタグのようなものですが、移動可能です。ブランチにいるときにコミットを行うと、ブランチは現在の位置を示す新しいコミットに移動します。
あなたの
HEAD
は、quot;current" とみなされるブランチへのポインタです。通常、リポジトリをクローンするときに
HEAD
を指します。
master
を指し、それがコミットを指すようになります。次に、次のようなことをすると
git checkout experimental
を切り替えると
HEAD
を指すようにします。
experimental
ブランチは別のコミットを指している可能性があります。
では、説明です。
をすると
git checkout v2.0
で指定されていないコミットに切り替わることになります。
branch
. その
HEAD
は現在 "detached"であり、ブランチを指していません。もし今コミットをしようと思ったら (するかもしれませんが)、このコミットを追跡するために更新すべきブランチポインタがありません。別のコミットに戻ると、新しく作成したコミットを失うことになります。これが、このメッセージの意味です。
通常、あなたができることは、次のように言うことです。
git checkout -b v2.0-fixes v2.0
. これは、新しいブランチポインタを、ツリー状の
v2.0
(この場合はタグ) を作成し、その後に
HEAD
を指すようにします。これで、コミットした場合、それを追跡することができるようになります (
v2.0-fixes
ブランチ) を作成し、通常と同じように作業することができます。ブランチを見るだけなら、あなたのやったことは何も問題ありません。
v2.0
というコードがあります。しかし、もしそこに何らかの変更を加えて追跡したいのであれば、ブランチが必要になります。
gitのDAGモデル全体を理解するのに時間をかけるべきでしょう。驚くほどシンプルで、すべてのコマンドが非常にわかりやすくなっています。
関連
-
[解決済み】複数のgitコミットを元に戻すには?
-
[解決済み] 複数のコミットをチェリーピックする方法
-
[解決済み] Git のアンプッシュされたコミットを表示する
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Gitで変更された複数のファイルのうち、1つのファイルだけを隠す?
-
[解決済み] Git を使ってタグをリモートリポジトリにプッシュするには?
-
[解決済み] Gitで特定のタグをダウンロードする
-
[解決済み] Git の detached head を修正するにはどうすればよいですか?
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] リモートリポジトリに存在しないローカルのgitタグを削除する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git, fatal: リモートエンドが予期せずハングアップしました。
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み】gitが「変更をコミットするか、マージする前にstashしてください」と言うのを解決するには?
-
[解決済み】ローカルに変更があるにもかかわらず、git pushが「すべて最新」と言う
-
gitアップロードの共通エラー処理
-
[解決済み] git が「Pull is not possible because you have unmerged files」と表示するのはなぜですか?
-
[解決済み] 短いGitバージョンのハッシュを取得する
-
[解決済み] 現在の支店にはトラッキング情報がありません
-
[解決済み] git rebase: "error: cannot stat 'file': パーミッションが拒否されました"
-
[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?