私は常にデタッチ状態のヘッド状態になっています。私はなぜ、私はそれが何であるか分からない。gitで分離ヘッド状態になるのを避けるには?
この状態から回復しようとするたびに、いくつかのファイルが失われています(最後のコミットから分離ヘッド状態で実行しました)。
この状態を完全に回避することは可能ですか、それとも設計によるのでしょうか?
私は常にデタッチ状態のヘッド状態になっています。私はなぜ、私はそれが何であるか分からない。gitで分離ヘッド状態になるのを避けるには?
この状態から回復しようとするたびに、いくつかのファイルが失われています(最後のコミットから分離ヘッド状態で実行しました)。
この状態を完全に回避することは可能ですか、それとも設計によるのでしょうか?
戸建ヘッドの状態はデザインによってはgitに存在する... SHA1、起源/マスター、通常はオフにすることはできません。名前付きブランチmaster
#1 -> #2 -> #3
^
master
^
HEAD
の先端にあり、あなたが行う場合は、リポジトリのクローンを作成した後、例えばこの
git checkout $specific_commit
ような何かを行う場合にのみ、あなたはデタッチヘッド状態に入ることができます
git checkout HEAD~
これは、HEADが現在ポイントしているものの直前にコミットされます。そして、あなたがデタッチヘッド状態である。この点から、次の状態
#1 -> #2 -> #3
^ ^
| master
|
HEAD
になってしまいます、特定のつまりHEADポイントは、分岐ラベルにコミットしていません。これに先立ち、HEADはブランチラベルmaster
を指していましたが、順番に特定のコミット(ブランチの先端)を指していました。今では、ブランチラベル(すなわち参照)を持たない別のブランチ上にそれらを置くことを約束します。 git branch
を実行すると、頭が孤立しているかどうかがわかります。
$ git branch
* (detached from 60e425a)
master
現在のブランチを示す星*
に注目してください。 新しいコミットを今作成した場合、git repoは次のようになります。あなたがgit checkout master
を行うことで、マスターに戻って今切り替えた場合
#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
HEAD
その後HEAD
あなたは#5
は、もはや#5
をコミットするようにナビゲートする任意のラベル、すなわち、記号参照を持ちませんコミット作成時に作成されたmaster
とブランチを切り替えます。つまり、あなたのコミットは事実上失われます。
したがって、2つの選択肢があります。
git checkout $specific_commit
を実行しないでください。 master
など、常に同じ名前のブランチの先端にとどまります。 git branch
を実行して確認できます。あなたがデタッチヘッド状態で自分自身を見つけるのですか、おそらくあなたはすでに行われている場合がは、上記に示唆流れると、あなたがそう
のような新しいブランチラベル/参照を作成する必要があり、あなたはその後、「ゆるい」にしたくないことをコミットあなたのリポジトリが次にもしそう#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
myNewBranch
^
HEAD
のように見えるようになります
Gitチェックアウト-b myNewBranch
master
に戻ると、git checkout myNewBranch
を実行して、いつでも#5
をコミットして、そのブランチ上のすべてのコミットに戻ることができます。
ローカルブランチでのみ動作し、分離状態になることはありません。たとえば、git checkout origin/master
の代わりにgit checkout master && git pull origin master
を実行する場合は、ブランチのトラッキングオプションも参照してください。
すでに切り離さHEADに座った変更を失うことを避けるために、彼らのためにブランチを作成します:git branch someNameForTheBranch
あなたがgit checkout sha1
を行うために使用される場合は、SHA1との移動をコミット時に自動的に新しいブランチを作成する-b
オプションを追加する必要がありますそれ。
この状態にならないようにすることが重要です。あなたは切り離さヘッド状況を修正したい場合は行うことができます
git stash
git checkout -b StartingPointOfYourBranch
git stash pop
「StartingPointOfYourBranch」は、参照することがあります。
'git reflog'はあなたの友人です。 – AD7six
'git checkout sha1'を避けてください。ここではsha1はHEAD、FETCH_HEADになります。また、HEAD状態を解除する場合もあります。作業しているブランチを正確に把握している場合は、切り離されたHEAD状態に留まることが大丈夫です。 – ElpieKay