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

svn up .

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

git checkout HEAD^ src/

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

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


当前回答

处于“分离头部”意味着head指的是特定的未命名提交(与命名分支相对)(cf:https://git-scm.com/docs/git-checkout部分分离的头部)。实际上,这意味着您签出了一个提交,但没有与之关联的分支名称。

您可以选择只创建与提交相关联的新分支

gitbranch新的分支名称。

这允许您将当前状态保存在名为new branch name的新分支中,而不再处于分离的头部状态。

或者,如果您希望返回到以前的状态,则需要选择之前选择的分支

git结帐@{-1}

其他回答

分离头部是指:

你不再在树枝上,您已在历史记录中检出一次提交

如果没有更改:可以通过应用以下命令切换到master

  git checkout master

如果您有要保留的更改:

在分离HEAD的情况下,提交工作正常,除非没有命名分支得到更新。若要使用已提交的更改更新主分支,请在您所在的位置创建一个临时分支(这样,临时分支将具有您在分离的HEAD中所做的所有已提交更改),然后切换到主分支并将临时分支与主分支合并。

git branch  temp
git checkout master
git merge temp

我也遇到过类似的情况。由于某种原因,我最终得到了一个分离的头部-我在与我认为我所在的分支相同的路径上进行了提交-例如,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

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

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

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

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

git checkout -f master

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

吉特告诉我怎么做。

如果键入:

git checkout <some-commit_number>

保存状态

git add .
git commit -m "some message"

然后:

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

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

我提交了更改。

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

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

$ git checkout master
Switched to branch 'master'

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

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

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