1819

リポジトリでいくつかの作業を行っていて、ファイルにローカルの変更があることに気付きました。もう必要ないので、新しいコピーをチェックアウトできると思って、ファイルを削除しました。Gitに相当することをしたかった

svn up .

使用git pullしてもうまくいかないようでした。ランダムな検索で、誰かが推奨するサイトにたどり着きました

git checkout HEAD^ src/

(srcは、削除されたファイルを含むディレクトリです)。

今、私は頭が離れていることに気づきました。私はそれが何であるか分かりません。元に戻すにはどうすればよいですか?

4

26 に答える 26

2635

デタッチされたヘッドは、もはやブランチにいないことを意味し、履歴で単一のコミットをチェックアウトしました (この場合、HEAD の前のコミット、つまり HEAD^)。

デタッチされた HEAD に関連付けられた変更を削除する場合

あなたがいたブランチをチェックアウトするだけです。

git checkout master

次にファイルを変更して、インデックスにある状態に復元したい場合は、最初にファイルを削除しないでください。

git checkout -- path/to/foo

これにより、ファイル foo がインデックス内の状態に復元されます。

切り離された HEAD に関連付けられた変更を保持したい場合

  1. 実行git branch tmp- これにより、変更が という新しいブランチに保存されますtmp
  2. 走るgit checkout master
  3. 行った変更を に組み込みたい場合は、ブランチからmaster実行します。を実行すると、ブランチにいるはずです。git merge tmpmastermastergit checkout master
于 2012-04-19T13:32:58.277 に答える
538

失いたくないファイルを変更した場合は、それらをプッシュできます。デタッチ モードでそれらをコミットしました。その後、一時的なブランチに移動して、後でマスターに統合できます。

git commit -m "....."
git branch my-temporary-work
git checkout master
git merge my-temporary-work

から抽出:

デタッチヘッドで行われたコミットをどうするか

于 2013-12-09T20:05:28.313 に答える
188

一時的なブランチを作成しないソリューション。

このモードですでに何かを変更していて、必要に応じて変更を保存したい場合に、切り離された HEAD 状態を終了 (「修正」) する方法:

  1. 保持したい変更をコミットします。デタッチされた HEAD 状態で行った変更を引き継ぐ場合は、それらをコミットします。お気に入り:

    git commit -a -m "your commit message"
    
  2. 保持したくない変更を破棄します。ハード リセットは、デタッチされた HEAD 状態で行ったコミットされていない変更をすべて破棄します。

    git reset --hard
    

    (これがないと、ステップ 3 は失敗し、デタッチされた HEAD 内の変更されたコミットされていないファイルについて不平を言います。)

  3. ブランチをチェックしてください。前に作業したブランチをチェックアウトして、切り離された HEAD 状態を終了します。次に例を示します。

    git checkout master
    
  4. コミットを引き継ぎます。別の質問に対する私の回答に示されているように、チェリーピッキングによって、分離された HEAD 状態で行ったコミットを引き継ぐことができるようになりました。

    git reflog
    git cherry-pick <hash1> <hash2> <hash3> …
    
于 2013-06-11T13:23:11.853 に答える
150

切り離された頭とは、次のことを意味します。

  1. あなたはもうブランチにいません。
  2. 履歴で単一のコミットをチェックアウトしました

変更がない場合:次のコマンドを適用してマスターに切り替えることができます

  git checkout master

保持したい変更がある場合:

デタッチされた HEAD の場合、名前付きブランチが更新されないことを除いて、コミットは通常どおりに機能します。コミットされた変更でマスター ブランチを更新するには、現在の場所に一時ブランチを作成します (この方法では、一時ブランチには、デタッチされた HEAD で行ったすべてのコミットされた変更が含まれます)。次に、マスター ブランチに切り替えて、一時ブランチをマスター。

git branch  temp
git checkout master
git merge temp
于 2016-08-29T00:39:15.080 に答える
82

変更を加えた後で、切り離された頭の上にいることに気付いた場合は、次のように実行できます: stash -> checkout master -> stash pop:

git stash
git checkout master   # Fix the detached head state
git stash pop         # Or for extra safety use 'stash apply' then later 
                      #   after fixing everything do 'stash drop'

何も起こらなかったように、コミットされていない変更と通常の「接続された」HEAD があります。

于 2015-01-01T22:40:00.487 に答える
79

これは、自分が切り離された頭の上にいて、すでにいくつかの変更を加えていることに気付いた後に行ったことです。

変更をコミットしました。

$ git commit -m "..."
[detached HEAD 1fe56ad] ...

コミットのハッシュ(1fe56ad)を思い出しました。次に、私がいるはずだったブランチをチェックアウトしました。

$ git checkout master
Switched to branch 'master'

最後に、コミットの変更をブランチに適用しました。

$ git cherry-pick 1fe56ad
[master 0b05f1e] ...

これは、一時的なブランチを作成するよりも少し簡単だと思います。

于 2014-08-02T23:33:49.227 に答える
30

「切り離された頭の状態」は一時ブランチにいるのでgit checkout -、最後にいたブランチに置くだけを使用してください。

于 2015-11-20T19:30:36.600 に答える
16

あなたはおそらくそうしましたgit reset --hard origin/your-branch

試してみてくださいgit checkout your-branch

于 2020-04-01T11:00:57.137 に答える
8

補遺

戻りたいブランチが最後に行ったチェックアウトである場合は、単純に を使用できますcheckout @{-1}。これにより、以前のチェックアウトに戻ります。

さらに、たとえば、このコマンドにエイリアスを付けることができるgit global --config alias.prevため、入力するだけgit prevで前のチェックアウトに切り替えることができます。

于 2016-01-22T11:09:35.253 に答える
1
git pull origin master

私のために働いた。リモートとブランチの名前を明示的に指定するだけでした。

于 2014-05-14T14:14:25.840 に答える