如何从'detached HEAD'状态返回?

问题描述 投票:0回答:8

如果有人要结账分行:

git checkout 760ac7e

来自例如

b9ac70b
,在不知道其 SHA1 的情况下,如何返回到最后一个已知的头
b9ac70b

git
8个回答
557
投票

如果您记得之前签出了哪个分支(例如

master
),您可以简单地

git checkout master

摆脱分离头状态。

一般来说:

git checkout <branchname>
会让你摆脱困境。

如果您不记得最后一个分支名称,请尝试

git checkout -

这也会尝试检查您上次检查的分支。


22
投票

使用

git reflog
查找之前签出的提交的哈希值。

到达最后签出分支的快捷命令(尽管不确定这是否可以与分离的 HEAD 和中间提交一起正常工作)是

git checkout -


18
投票

您可能在

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
合并到您想要的任何分支中,这样您就不会丢失提交。


8
投票

我遇到了这种边缘情况,我检查了以前版本的代码,其中我的文件目录结构不同:

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'.

2
投票

git switch master
切换到“master”分支。
git switch -
切换回上一个分支。


1
投票

一般情况:

git checkout <branch*>
git checkout master
为特例)。

*我们(不小心)从中分离了一个提交(使用

git checkout <commit_hash>


0
投票

以防万一有人与我有相同的边缘情况:我有一个名为

test
的分支,并试图创建一个名为
test/my-experimental-feature
的分支。这让 git 很困惑,因为它认为我指的是一个已经存在的分支。我将其更改为
test--my-experimental-feature
并且效果很好。


-2
投票

由于 GitHub 不再使用 master 作为新存储库的默认分支。

git checkout master
对我不起作用。

有效的是:

git checkout main

© www.soinside.com 2019 - 2024. All rights reserved.