我在工作树中有什么
* 63a7b9f 2017-08-21 | temp commit (HEAD) [Jiaxiang Liang]
* ad8d3f2 2017-08-19 | adding gitignore [Jiaxiang Liang]
* a562db1 2016-03-31 | revert to correct bugfix [Y. Yan]
* 3b24fd4 2016-03-31 | old src old test [Y. Yan]
* f9b4935 2016-03-31 | old src new test [Y. Yan]
* 6bf6585 2016-03-31 | new src new test [Y. Yan]
* 71209a6 2016-03-31 | new src old test [Y. Yan]
* 3114478 2016-03-15 | bugfix: anti-flow for push pop and peek [Y. Yan]
我想要做的是删除提交63a7b9f
并将头移至ad8d3f2
。我并不关心63a7b9f
中的任何事情。所以我做了
git reset --hard ad8d3f2
HEAD is now at ad8d3f2 adding gitignore
它似乎删除了提交,但我有这个让我烦恼的事情:
git status
HEAD detached from 63a7b9f
nothing to commit, working directory clean
所以我很奇怪HEAD为什么不动。我确实希望HEAD指向ad8d3f2
。我想要像git reset
之后的那样:
git status
HEAD detached at ad8d3f2
解决方案:所以建议使用分支的答案给了我一些想法来解决我的问题。请注意,我忘了提及所有提交都处于状态HEAD detached at <commit>
。
git branch temp
git checkout temp
git checkout ad8d3f2 //may not be necessary
git branch -d temp
在此之后,我得到了我想要的状态。
答案 0 :(得分:2)
输出HEAD detached from <commit>
基于HEAD
的 reflog ,而不是其当前值。这可能是一个错误,但它并不意味着你现在不是一个不同的独立HEAD。
具体来说,一旦HEAD
分离,就没有分支重置。使用git reset --hard <commit>
只需设置索引和工作树,同时将HEAD
设置为提交的,就好像您已经完成了另一个git checkout -f <commit>
一样。 HEAD
仍然分离;只有git checkout <name>
,对于某个有效的分支名称<name>
,才会重新附加您的HEAD
。
答案 1 :(得分:0)
git reset --hard HEAD^1
怎么样?
答案 2 :(得分:0)
查看您的工作树,似乎您要删除上一次提交。这里有几个选项,其中一些包括:
HEAD
指针时,git reset 。您可以使用
执行此操作git reset --hard HEAD^
这会在您上次提交之前将HEAD
重置为提交,或者在工作树中提交ad8d3f2
。
git checkout 到新分支,从第二个到最后一个提交ad8d3f2
分支。
git checkout ad8d3f2 .
命令末尾的.
将ad8d3f2
更改应用于整个工作树。如果您在上次提交中添加了文件,则可能会遇到一些麻烦,因为此方法不会删除它们。
git revert 会删除上次提交时添加的文件。
git revert --no-edit HEAD^
如果您不想重写提交历史记录,或者如果您已经推送到远程仓库并且不想强制推送,那么这也是一个不错的选择 - 它会创建一个“还原”提交