2

ずっと頭が離れた状態になっています。なぜだか分からないし、それが何なのかも分からない。

この状態から回復しようとするたびに、いくつかのファイルが失われます (切り離されたヘッド状態で行った最後のコミットから)。

この状態を完全に回避することは可能ですか、それとも設計によるものですか?

4

3 に答える 3

5

デタッチされたヘッド状態は設計上 git に存在し、通常はオフにすることはできません。リポジトリのクローンを作成した後、次のようなことを行う場合にのみ、切り離されたヘッド状態に入ることができます

git checkout $specific_commit

たとえば、名前付きブランチの先端にいる場合master

#1 -> #2 -> #3
            ^
            master
            ^
            HEAD

あなたがやる

git checkout HEAD~

これは、HEAD が現在指している直前にコミットされます。その後、次の状態になります

#1 -> #2 -> #3
      ^     ^
      |     master
      |
      HEAD

この時点から、切り離された head 状態になります。つまり、HEAD はブランチ ラベルではなく特定のコミットを指します。この HEAD の前はmaster、特定のコミット (ブランチの先端) を順番に指していたブランチ ラベルを指していました。これまでに作成したコミットは、ブランチ ラベル (つまり、参照) を持たない別のブランチになります。実行git branchすると、ヘッドが切り離された状態であるかどうかがわかります。

$ git branch
* (detached from 60e425a)
  master

*現在のブランチを示す星に注目してください。今すぐ新しいコミットを作成すると、git repo は次のようになります。

#1 -> #2 -> #3
      |     ^
      |     master
      |
      \----> #5
             ^
             HEAD

実行して master に戻すと、 commit を作成しgit checkout masterたときに作成されたブランチHEADに切り替えられ、ラベル、つまり commit に移動するためのシンボリック参照がなくなります。つまり、コミットは事実上失われます。master#5#5

したがって、2 つのオプションがあります。

  1. ヘッドが分離した状態になりたくない場合は、実行しないでくださいgit checkout $specific_commit。などの同じ名前のブランチの先端に常にとどまりmasterます。を実行することで確認できますgit branch
  2. デタッチされたヘッド状態にあることに気付き、「緩め」たくないコミットを既に行っている可能性がある場合は、上記のフローで提案されているように、新しいブランチ ラベル/参照を作成する必要があります。

    git チェックアウト -b myNewBranch

これにより、リポジトリが次のようになります

#1 -> #2 -> #3
      |     ^
      |     master
      |
      \----> #5
             ^
             myNewBranch
             ^
             HEAD

その後、元に戻せば、 を実行することで、masterいつでもコミットに戻り#5、そのブランチでの後続のすべてのコミットに戻ることができますgit checkout myNewBranch

于 2016-05-30T07:28:44.680 に答える
4

ローカル ブランチでのみ作業すると、切り離された状態になることはありません。たとえば、git checkout origin/masterdoの代わりにgit checkout master && git pull origin master、ブランチの追跡オプションも参照してください。

デタッチされた HEAD に既にある変更が失われないようにするには、それらのブランチを作成します。git branch someNameForTheBranch

于 2016-05-29T16:39:53.743 に答える
1

を行っていた場合は、コミット sha1 に新しいブランチを自動的に作成して移動するオプションをgit checkout sha1追加する必要があります。-b

この状態にならないようにすることが最優先です。取り外した頭の状況を修正したい場合は、次のことができます

git stash
git checkout -b StartingPointOfYourBranch
git stash pop

「StartingPointOfYourBranch」は参照でなければなりません: sha1、origin/master、...

于 2016-05-29T16:54:13.283 に答える