Git: 'detached HEAD'状態から戻る方法


217

ブランチをチェックアウトする場合:

git checkout 760ac7e

たとえばb9ac70bb9ac70bSHA1を知らなくても、最後の既知のヘッドに戻るにはどうすればよいですか。

回答:


331

以前にチェックアウトされたブランチ(例えばmaster)を覚えている場合は、簡単にできます。

git checkout master

デタッチされたHEAD状態から抜け出します。

一般的に言えば、git checkout <branchname>それからあなたを救います。

最後のブランチ名を覚えていない場合は、

git checkout -

また、最後にチェックアウトしたブランチをチェックアウトしようとします。


17
git checkout --キラー機能!
dimpiax 2018

1
しないと、git checkout -b new_branch_nameデタッチされたHEAD状態の間に行われたコミットが失われますか?
jocassid 2018

2
@jocassidはい、そうです。それらはしばらく存在しgit gcますが、実行されると永久に削除されます。git reflogそこにいる限り、一緒に見ることができます。
2018

これを行うと、デタッチされたHEADで行ったコミット/変更が失われませんか?これはもっと良い方法ではないですか?stackoverflow.com/a/61489179/13087176
ほろ酔いboopenstein

@tipsyboopenstein正解です。:jocassidすでに述べたstackoverflow.com/questions/11801071/...
eckesを

16

git reflog以前にチェックアウトされたコミットのハッシュを見つけるために使用します。

最後にチェックアウトしたブランチに到達するためのショートカットコマンド(これがデタッチされたHEADと中間コミットで正しく動作するかどうかはわかりません)は git checkout -


4

私はこのエッジケースを持っていて、私のファイルディレクトリ構造が異なる以前のバージョンのコードをチェックアウトしました:

git checkout 1.87.1                                    
warning: unable to unlink web/sites/default/default.settings.php: Permission denied
... other warnings ...
Note: checking out '1.87.1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. 
Example:

  git checkout -b <new-branch-name>

HEAD is now at 50a7153d7... Merge branch 'hotfix/1.87.1'

このような場合は、-forceを使用する必要がある場合があります(元のブランチに戻って変更を破棄することが安全であることがわかっている場合)。

git checkout master 動作しませんでした:

$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
web/sites/default/default.settings.php
... other files ...

git checkout master --force(またはgit checkout master -f)働いた:

git checkout master -f
Previous HEAD position was 50a7153d7... Merge branch 'hotfix/1.87.1'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

1

detached HEAD州でいくつかの新しいコミットを行った可能性があります。他の答えが助言するようにあなたがそうするなら私は信じます:

git checkout master
# or
git checkout -

その後、コミットを失う可能性があります!! 代わりに、これを行うことができます。

# you are currently in detached HEAD state
git checkout -b commits-from-detached-head

commits-from-detached-head必要なブランチにマージして、コミットを失わないようにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.