我更改了一些代码,然后运行
git add .
git commit -m "message1"
但在那之后,我做了
git reset hard
git pull
git push
(当然,推动实际上没有做任何事情。)
现在我想在提交“message1”时检索我的文件状态。我怎么能这样做?
答案 0 :(得分:2)
git reset hard
将 index (不是工作目录)重置为名为hard
的分支的状态。所以没有任何改变:你可以做一个简单的git reset
来重置索引。无论如何,没有其他任何改变。
如果你做了git reset --hard
,那就不一样了。这会将工作目录中的索引和未提交的更改重置为HEAD状态,即当前分支的最后一次提交。由于您在该命令之前直接进行了提交,因此如果您在该提交中包含工作目录的所有更改,则也不会丢失任何内容。如果你没有,那么你运气不好,那些从未进入索引的未提交的更改将丢失。
git pull
将从远程获取并将任何更改合并到您的分支中,因此这可能实际上已经发生了变化。由于您在本地进行了提交,因此有两种情况:您是最新的,没有任何更改;远程有变化,Git创建了一个合并提交。在后一种情况下,您可以使用git reset --hard HEAD@{1}
还原它。您还可以使用git reflog
检查reflog,以查看HEAD之前指向的位置。
至于git push
,它没有做任何事情并不明显。实际上,既然你在本地提交了一个提交,它应该已经做了一些事情。它应该已经将您的提交和最终合并提交(如上所述)推送到远程。在这种情况下,不建议再次返回(使用上面的命令)撤消这些更改,因为您永远不应删除已发布的提交。
答案 1 :(得分:1)
只需使用git reflog
即可。它将显示您在存储库中执行的操作的完整历史记录
跟踪要恢复的提交以将其签出后,打开一个新分支(因为您将处于分离的HEAD中)并从那时起继续工作。
将内容添加到存储(索引)后,只要您的gc没有运行,您就可以随时恢复它。您可以使用git fsck
查找这些dangaling文件的SHA-1并使用`git cat-file -p'恢复它们以查看内容并将其复制到您的需要。