我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的Git相当于

svn up .

使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站

git checkout HEAD^ src/

(src是包含已删除文件的目录)。

现在我发现我有一个分离的脑袋。我不知道那是什么。我怎么撤销?


当前回答

补充@ralphteninija的答案。如果使用git checkout master后收到此消息:

请在切换分支之前提交更改或将其隐藏。正在中止

然后,您可以简单地使用-f标志强制签出,如下所示:

git checkout -f master

显然,这将导致丢失在分离模式中所做的所有更改。所以使用时要小心。

其他回答

Git:您当前不在分支上。

Git不时显示:

将历史推到当前(分离的HEAD)立即状态,使用git push origin HEAD:<name of remote branch>

这意味着:

“HEAD没有分支”

要修复此问题,请运行2个命令:

gitbranch-f{{your_working_branch}}HEAD—将分支设置为头部git checkout{{your_working_branch}}--checkout==开关分支

补充@ralphteninija的答案。如果使用git checkout master后收到此消息:

请在切换分支之前提交更改或将其隐藏。正在中止

然后,您可以简单地使用-f标志强制签出,如下所示:

git checkout -f master

显然,这将导致丢失在分离模式中所做的所有更改。所以使用时要小心。

这种方法可能会丢弃部分提交历史记录,但如果旧主分支和当前状态的合并很棘手,或者您不介意丢失部分提交历史,则会更容易。

要简单地保持当前状态而不合并,请将当前分离的HEAD转换为主分支:

手动备份存储库,以防发生意外错误。提交您要保留的最后更改。创建一个临时分支(让我们将其命名为分离头),该分支将包含当前状态的文件:

git checkout -b detached-head

(a) 如果不需要保留主分支,请将其删除

git branch -D master

(b) 如果要保留,请重命名

git branch -M master old-master

将临时分支重命名为新的主分支

git branch -M detached-head master

资料来源:改编自Gary Lai的这篇Medium文章。

如果您已经更改了不想丢失的文件,可以将其推送。我已经在分离模式下提交了它们,之后您可以移动到一个临时分支以稍后在master中集成。

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

摘自:

如何处理在分离的头脑中做出的承诺

为了进一步澄清@Philippe Gerber的答案,这里是:

在樱桃采摘之前,在这种情况下,需要一个git结账大师。此外,它只需要在分离头中提交。