如何在不丢失Git中的最后一次提交的情况下返回上一次提交?

时间:2013-03-10 23:28:45

标签: git

这是我想要做的。我想在之前返回2次提交,将提交中更改的文件作为新提交带回来。但我不想失去我的最后一次承诺。我的最后一次提交在代码中有一些错误,但我现在想保留它。

我阅读了一些文档,但没有人清楚说明重置头部时会发生什么。例如,你是否会丢失所有提交,直到重置为(向后)的提交?

我想了解这一切是如何运作的,但我对git revertresetcheckout命令感到困惑。

我意识到我应该把最后一次提交藏起来而不是提交,但现在这是另一个故事。

3 个答案:

答案 0 :(得分:10)

如果你想回去,先说2次提交,你可以git checkout HEAD~2。这会让你像现在一样。如果您在分支机构mastergit checkout master将带您回到现在。但是,如果要保持当前状态但在那里启动新的开发分支,git checkout -b HEAD~2将在那里启动新分支。如果您想要回放主人但没有丢失当前未完成/已完成的工作,请执行

git branch wip           # New branch ends a current tip
git reset --hard HEAD~2  # Old branch rewound, get files from then

答案 1 :(得分:9)

revert进行新的提交,以恢复旧提交所做的更改。 reset --hard将当前分支的HEAD更改为指定的提交。 checkout将工作副本切换到指定的分支或提交。

当您将分支重置为较旧的提交时,如果较新的提交不是其他分支或标记的祖先的一部分(它们仍然可以通过reflog访问),则会丢失较新的提交。

目前尚不清楚您需要做什么,最可能的解决方案是revert(完全恢复较旧的提交或一系列提交)和rebase -i(更改较旧的提交或删除)它来自历史)。

答案 2 :(得分:0)

使用$ git reflog,您可以看到最后的哈希值,这些值对于通过强制从上一次提交进行推送而丢失了最后的提交之后可用于返回到先前的状态。

也:

$ git fsck --no-reflog
$ git show <hash>
$ git checkout -b <new-branch> <hash>

GL

Source