Git:如何从'detached HEAD'状态返回

2skhul33  于 2022-11-20  发布在  Git
关注(0)|答案(7)|浏览(182)

如果一个人要结帐一个分支:
git checkout 760ac7e
从例如b9ac70b,如何在不知道其SHA1的情况下回到最后已知的头部b9ac70b

7nbnzgx9

7nbnzgx91#

如果您记得之前 checkout 了哪个分支(例如master),则只需

git checkout master

以脱离 detached HEAD 状态。
一般来说:git checkout <branchname>会帮你摆脱困境。
如果您不记得最后一个分支名称,请尝试

git checkout -

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

f4t66c6m

f4t66c6m2#

使用git reflog查找以前 checkout 的提交的哈希值。
一个快捷命令是git checkout -,它可以到达您最后一个 checkout 分支(不确定它是否可以正确处理分离的HEAD和中间提交)

m528fe3b

m528fe3b3#

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

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

格式

ryhaxcpt

ryhaxcpt4#

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

ghhkc1vu

ghhkc1vu5#

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

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

vecaoik1

vecaoik16#

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

niknxzdl

niknxzdl7#

git checkout master对我不起作用。起作用的是:
git检出主

相关问题