修复Git分离的头部?
我在存储库中做了一些工作,发现一个文件有本地更改。 我不再需要它们,所以我删除了该文件,认为我只需签出新的副本即可。 我想做相当于git的
svn up .
使用git pull
似乎不起作用。 一些随机搜索导致我到一个有人推荐的网站
git checkout HEAD^ src/
( src
是包含已删除文件的目录)。
现在我发现我有一个独立的头。 我不知道那是什么。 我如何撤消?
分离的头意味着你不再在分支上,你已经在历史中签出了一个单独的提交(在这种情况下是在HEAD之前的提交,即HEAD ^)。
如果您想删除与分离的HEAD关联的更改
你只需要检查你所在的分支,例如
git checkout master
下一次你改变了一个文件并且想把它恢复到它在索引中的状态时,不要先删除文件,只要
git checkout -- path/to/foo
这会将文件foo恢复到它在索引中的状态。
如果您想保留与分离的HEAD相关联的更改
git log -n 1
; 这将在分离的HEAD上显示最近的提交。 复制并粘贴提交哈希。 git checkout master
git branch tmp <commit-hash>
。 这会将您的更改保存在名为tmp
的新分支中。 git merge tmp
到master
,请从master
分支运行git merge tmp
。 运行git checkout master
后,您应该在master
分支上。 如果您更改了不想丢失的文件,可以推送它们。 我已经将它们提交到分离模式,之后您可以移动到临时分支,以便稍后集成到主模块中。
git commit -m "....."
git branch my-temporary-work
git checkout master
git merge my-temporary-work
摘自:
如何处理独立头脑中的犯下行为
如果您已经在此模式下更改了某些内容并可选择保存更改,如何退出(“修复”)分离的HEAD状态。
此解决方案不会创建临时分支。
提交您想要保留的更改。 如果您想要接管您在分离的HEAD状态下所做的任何更改,请提交它们。 喜欢:
git commit -a -m "your commit message"
放弃您不想保留的更改。 硬重置将丢弃您在分离的HEAD状态下所做的任何未提交的更改:
git reset --hard
(如果没有这个,步骤3将会失败,抱怨在分离的HEAD中修改了未提交的文件。)
检查你的分支。 通过检出您之前工作的分支退出分离的HEAD状态,例如:
git checkout master
接管你的提交。 您现在可以通过樱桃采摘来接管您在分离的HEAD状态下进行的提交,如我对另一个问题的回答所示。
git reflog
git cherry-pick <hash1> <hash2> <hash3> …
下一篇: How to stop tracking and ignore changes to a file in Git?