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

svn up .

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

git checkout HEAD^ src/

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

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


当前回答

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

要简单地保持当前状态而不合并,请将当前分离的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文章。

其他回答

补遗

如果您希望返回的分支是最后一次签出,则可以简单地使用checkout@{-1}。这将带您返回上一次结账。

此外,您可以将此命令别名为,例如,git global--config alias.prev,这样您只需键入git prev即可切换回上一个签出。

由于“分离的头状态”使您处于临时分支,所以只需使用git checkout,这将使您处于上一个分支。

分离的头意味着你没有正确地签出你的分支,或者你刚刚签出了一个提交。

如果您遇到这样的问题,请首先隐藏本地更改,这样您就不会丢失更改。

之后。。。使用以下命令签出所需的分支:

假设您想要分支MyOriginalBranch:

git checkout-b someName origin/MyOriginalBranch

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

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

吉特告诉我怎么做。

如果键入:

git checkout <some-commit_number>

保存状态

git add .
git commit -m "some message"

然后:

 git push origin HEAD:<name-of-remote-branch>