我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的Git相当于
svn up .
使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站
git checkout HEAD^ src/
(src是包含已删除文件的目录)。
现在我发现我有一个分离的脑袋。我不知道那是什么。我怎么撤销?
我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的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
必须一直手动执行这一操作有点烦人,但总比为了合并来自另一个分支的更改而更改工作目录要好。
其他回答
通常HEAD指向分支。当它不是指向分支,而是指向像69e51这样的提交散列时,这意味着你有一个分离的HEAD。你需要指出两个分支来解决这个问题。你可以做两件事来解决它。
git checkout other_branch//当您需要提交哈希中的代码时不可能创建一个新分支,并将提交哈希指向新创建的分支。
HEAD必须指向分支,而不是提交哈希是黄金法则。
吉特告诉我怎么做。
如果键入:
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] ...
我认为这比创建一个临时分支要简单一些。
这种方法可能会丢弃部分提交历史记录,但如果旧主分支和当前状态的合并很棘手,或者您不介意丢失部分提交历史,则会更容易。
要简单地保持当前状态而不合并,请将当前分离的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文章。
如果你做出了改变,然后意识到你是一个独立的人,你可以这样做: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,就像什么都没有发生一样。