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

svn up .

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

git checkout HEAD^ src/

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

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


当前回答

当您在git中签出一个特定的提交时,您将处于分离的头部状态。。。也就是说,您的工作副本不再反映命名引用的状态(如“master”)。这对于检查存储库的过去状态非常有用,但如果您确实试图恢复更改,则不需要检查。

如果您对特定文件进行了更改,并且只想放弃这些更改,则可以使用如下签出命令:

git checkout myfile

这将丢弃所有未提交的更改,并将文件恢复到当前分支头部的任何状态。如果要放弃已提交的更改,可以使用reset命令。例如,这将将存储库重置为上一次提交的状态,并放弃任何后续更改:

git reset --hard HEAD^

但是,如果您与其他人共享存储库,git重置可能会造成中断(因为它会擦除存储库历史的一部分)。如果您已经与其他人共享了更改,您通常希望查看git-restore,它会生成一个“反提交”,也就是说,它会创建一个新的提交来“撤消”所涉及的更改。

GitBook有更多细节。

其他回答

通常HEAD指向分支。当它不是指向分支,而是指向像69e51这样的提交散列时,这意味着你有一个分离的HEAD。你需要指出两个分支来解决这个问题。你可以做两件事来解决它。

git checkout other_branch//当您需要提交哈希中的代码时不可能创建一个新分支,并将提交哈希指向新创建的分支。

HEAD必须指向分支,而不是提交哈希是黄金法则。

这是我在意识到自己头脑清醒,已经做出了一些改变之后所做的事情。

我提交了更改。

$ git commit -m "..."
[detached HEAD 1fe56ad] ...

我记得提交的哈希值。然后我检查了我本该去的那家分店。

$ git checkout master
Switched to branch 'master'

最后,我将提交的更改应用于分支。

$ git cherry-pick 1fe56ad
[master 0b05f1e] ...

我认为这比创建一个临时分支要简单一些。

如果你做出了改变,然后意识到你是一个独立的人,你可以这样做:stash->checkout master->stash pop:

git stash
git checkout master   # Fix the detached head state
git stash pop         # Or for extra safety use 'stash apply' then later 
                      #   after fixing everything do 'stash drop'

您将拥有未提交的更改和正常的“附加”HEAD,就像什么都没有发生一样。

吉特告诉我怎么做。

如果键入:

git checkout <some-commit_number>

保存状态

git add .
git commit -m "some message"

然后:

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

不创建临时分支的解决方案。

如何退出(“修复”)分离的HEAD状态,当您已经在该模式中更改了某些内容,并且(可选)想要保存更改时:

提交要保留的更改。如果您想接管在分离HEAD状态下所做的任何更改,请提交它们。喜欢:gitcommit-a-m“您的提交消息”放弃不想保留的更改。硬重置将丢弃您在分离HEAD状态下所做的任何未提交的更改:git重置--硬(如果没有这一点,步骤3将失败,抱怨分离的HEAD中修改了未提交的文件。)查看您的分支。通过检查之前处理的分支来退出分离的HEAD状态,例如:切换到主分支接管你的承诺。现在,您可以通过樱桃采摘来接管在分离HEAD状态下所做的提交,如我对另一个问题的回答所示。数字刷新gitcherry-pick<hash1><hash2><hash3>…