1. ホーム
  2. git

なぜ git は私たちを (ブランチなし) にしたのですか?

2023-07-26 07:50:05

質問

今朝、私たちのレポからプルしたところ、git は私たちを (ブランチなしで) 入れるようにしました。

なぜこのようなことが起こったのか、理解できません。そして、私たちの変更を失うことなく、そこから抜け出すにはどうしたらよいのでしょうか?

どのように解決するのですか?

現在、どのブランチにも存在しません。 を切り離した ヘッド つまり、HEAD ポインタはブランチ名を記号的に指すのではなく、コミットを直接参照していることになります。

SHA1 によるコミットのチェックアウト、リベースの最中、マージに失敗した時などにこのような状況に陥ることがあります。偶然にこの状況に陥るために何をしたかを言うのは難しいです。

切り離された HEAD からどこかのブランチに切り替えたときに、変更内容を失う可能性があると言われていますが、reflog は常に HEAD がどこに移動したかを記録しています。実際、Git 1.7.5 では、切り離された HEAD から切り替えるとコミットが失われることを警告しています。唯一できることは 本当に 作業を失う可能性があるのは、コミットしていない変更があるときだけで、それはコミットするか隠しておきたいものです。

何が起こったかを確認する簡単な方法は git reflog または git log -g --decorate を使うと、より冗長なリストが表示されます。また --decorate オプションは、すべての SHA1 にそれを指すすべてのブランチの名前をつけます。もし現在の HEAD の SHA1 が master と全く同じであれば、何もせずに git checkout master を実行すれば元に戻ります。そうでない場合は、その SHA1 が他のブランチで指されていないかどうかを確認します。もしそうでなければ、それにしがみつくためにブランチを作成するのがよいでしょう。

もうひとつのよいコマンドは git branch -av これは同様にすべてのブランチとそのブランチが指すものをリストアップするので、あなたの (no branch) が本当にそうであるべきなのかを知ることができます。