どういうわけか、私は切り離されたHEADになってしまいました。私はいくつかのコミットを行い、コミット履歴にHEADとして表示されました(ただし、master
いくつかのコミットが遅れていました)。次に、チェックアウトして、取り外したヘッドを修正しようとしましたmaster
。
これで、デタッチされた HEAD への以前のコミットが表示されなくなりました。それらは永遠になくなったのですか?
どういうわけか、私は切り離されたHEADになってしまいました。私はいくつかのコミットを行い、コミット履歴にHEADとして表示されました(ただし、master
いくつかのコミットが遅れていました)。次に、チェックアウトして、取り外したヘッドを修正しようとしましたmaster
。
これで、デタッチされた HEAD への以前のコミットが表示されなくなりました。それらは永遠になくなったのですか?
[以前のコミット] は永久に失われていますか?
いいえ。これらのコミットは の出力には表示されませんがgit log
、リポジトリの内臓にはまだ存在しており、取得することはできます。そのような場合、reflogはセーフティ ネットです。
詳細な情報がなければ、確実に問題を解決する一連のコマンドを提供することは困難ですが、次のことを行うことができます。
master
実行してブランチの reflog を開きます
git reflog master
コミット メッセージを手掛かりとして使用して、master
ブランチが指すコミットを特定します。master
reflog内の対応するエントリの番号を (紙に)書き留めます。reflog を終了します。
master
現在のブランチであることを確認してください。
git checkout master
走る
git reset master@{<n>}
where<n>
は、対象のコミットに対応する reflog のエントリの番号を表します。
その後master
、分離された HEAD になる前のように、目的のコミットを指す必要があります。
いいえ。reflog を確認してください ( git reflog
)。
Git の石器時代バージョンを使用していない限り、出力されるメッセージはかなり良好です (これらは 2.2.0 のものですが、1.8.X 以前からこのようになっていると思います)。
最初に切り離されたヘッド状態になったとき、作業するブランチを作成する方法が正確に示されているはずです。
注: 「HEAD~1」をチェックアウトします。
あなたは「切り離された頭」の状態にあります。周りを見回して、実験的な変更を加えてコミットすることができます。また、別のチェックアウトを実行することで、ブランチに影響を与えることなく、この状態で行ったコミットを破棄できます。
作成したコミットを保持するために新しいブランチを作成する場合は、checkout コマンドで -b を再度使用することで (現在または後で) そうすることができます。例:
git checkout -b new_branch_name
そして、頭が切り離された状態を離れると、このメッセージが表示されるはずです
警告: ブランチに接続されていない 1 つのコミットを残しています:
27c4eec フー
新しいブランチを作成してそれらを保持したい場合は、次のようにするのが良いでしょう:
git ブランチ new_branch_name 27c4eec
これらのメッセージが表示されない場合は、Git のバージョンをアップグレードすることを検討してください。
これらのメッセージが表示された場合は、出力された指示に従ってください。