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

svn up .

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

git checkout HEAD^ src/

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

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


当前回答

我也遇到过类似的情况。由于某种原因,我最终得到了一个分离的头部-我在与我认为我所在的分支相同的路径上进行了提交-例如,head是分支标记的子级,但由于某种原因分支标记停留在历史提交。。。可能是因为我推了??

它不会让我推动,因为我不被认为是在我认为我在的分支上。

我不想改变我的历史,也不想摘樱桃,我只是花了大约8周的时间在树枝上工作,所以重新设置了——这让我有点紧张!

解决方案只是执行以下操作:

git branch -f myStuckBranch HEAD
git checkout myStuckBranch

即使HEAD和myStuckBranch现在指向同一个对象,您仍需要执行签出,因为您仍然被认为处于分离的头部状态(而不是在分支上)

我不是git的专家(主要使用mercurial,这绝不会造成这种奇怪的情况),但我对这个命令的理解是,它只是说“将myStuckBranch更改为指向HEAD”。

我经常发现自己在获取后使用此命令合并来自master的更改,而不必交换我的工作目录,否则它会尝试使用旧的(无趣的)master版本:

git fetch
git branch -f master origin/master  -- err yeah don't just ignore what's been going on remotely - eg point my master at the real master
git merge master -- merge the changes into my local branch

必须一直手动执行这一操作有点烦人,但总比为了合并来自另一个分支的更改而更改工作目录要好。

其他回答

如果你做出了改变,然后意识到你是一个独立的人,你可以这样做: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,就像什么都没有发生一样。

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

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

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

当您处于分离头部的情况并创建了新文件时,首先确保将这些新文件添加到索引中,例如:

git add .

但是,如果您只更改或删除了现有文件,则可以通过以下方式同时添加(-a)和提交消息(-m):

git commit -a -m "my adjustment message"

然后,您可以简单地使用当前状态创建一个新分支:

git checkout -b new_branch_name

你将有一个新的分支,所有的调整都将在新分支中。然后,您可以根据需要继续推送到远程和/或签出/拉入/合并。

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

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

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

假设您想要分支MyOriginalBranch:

git checkout-b someName origin/MyOriginalBranch

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