【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我在存储库中进行了一些工作,发现文件有本地更改。 我不再想要它们了,所以我删除了文件,以为我可以签出新副本。 我想做相当于
svn up .
使用git pull
似乎没有用。 一些随机搜索将我带到一个有人建议这样做的站点
git checkout HEAD^ src/
( src
是包含已删除文件的目录)。
现在我发现我有一个超脱的头。 我不知道那是什么。 我该如何撤消?
#1楼
当您在git
签出特定的提交时,您最终会处于分离的头部状态……也就是说,您的工作副本不再反映命名引用(例如“ master”)的状态。 这对于检查存储库的过去状态很有用,但是对于您实际上想要还原的更改却不是您想要的。
如果您对特定文件进行了更改,而只想放弃它们,则可以使用checkout
命令,如下所示:
git checkout myfile
这将丢弃所有未提交的更改,并将文件还原到当前分支头中的任何状态。 如果要放弃已提交的更改,则可能要使用reset
命令。 例如,这会将存储库重置为上一次提交的状态,并丢弃所有后续更改:
git reset --hard HEAD^
但是,如果您要与其他人共享存储库,则git reset
可能会造成破坏(因为它会删除存储库历史记录的一部分)。 如果您已经与其他人共享了更改,则通常需要查看git revert
,它会生成一个“反提交”(anticommit)-也就是说,它会创建一个新的提交来“撤消”有问题的更改。
《 Git Book》有更多详细信息。
#2楼
分离的头部意味着您不再在分支上,您已签出历史记录中的单个提交(在这种情况下,是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
分支上。
#3楼
不创建临时分支的解决方案。
当您已经在此模式下进行了某些更改并且想要保存更改时,如何退出(“修复”)分离的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> …
#4楼
如果您不想丢失文件,可以将其推送。 我已将它们提交为分离模式,然后您可以移至临时分支以稍后集成到master中。
git commit -m "....."
git branch my-temporary-work
git checkout master
git merge my-temporary-work
摘自:
#5楼
git pull origin master
为我工作。 只是要明确给出远程和分支名称。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3154668