Git:如何从'分离头'状态

如果要结帐一个分支:

git checkout 760ac7e

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

165093 次浏览

使用git reflog来查找以前检出的提交的哈希值。

git checkout -是一个快捷命令,用于到达你最后签出的分支(虽然不确定分离HEAD和中间提交是否正确)

如果你记得之前签出了哪个分支(例如master),你可以简单地

git checkout master

退出分离的头状态。

一般来说:git checkout <branchname>会让你摆脱它。

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

git checkout -

这也试图检出您最后检出的分支。

我有这个边缘情况,在那里我检查了之前版本的代码,其中我的文件目录结构是不同的:

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

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

以防有人有和我一样的边缘情况:我有一个名为test的分支,并试图创建一个名为test/my-experimental-feature的分支。这让git感到困惑,因为它认为我引用的是一个已经存在的分支。我把它改为test--my-experimental-feature,它工作得很好。

一般情况:git checkout <branch*> (git checkout master是一个特殊情况)。

*我们(意外地)从中分离了一个提交(使用git checkout <commit_hash>)

因为GitHub不再使用master作为新存储库的默认分支。 git checkout master没有为我工作

有效的是:
git checkout main < / p >