20

这就是我想要做的。我想回到之前的 2 次提交,可能会将在该提交中更改的文件作为新提交带回。但我不想失去我的最后一次提交。我的最后一次提交在代码中有一些错误,但我想暂时保留那个。

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

我试图了解这一切是如何工作的,但我对 git和revert命令感到相当困惑。resetcheckout

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

4

3 回答 3

19

如果你想回去,比如之前的 2 次提交,你可以做git checkout HEAD~2. 这会让你们都像当时一样。如果你在分支上mastergit checkout master会带你回到现在。但是,如果您想保持当前状态但在那里开始一个新的开发分支,git checkout -b HEAD~2将在那里开始一个新的分支。如果您想倒带 master 但又不想丢失当前未完成/损坏的工作,请执行

git branch wip           # New branch ends a current tip
git reset --hard HEAD~2  # Old branch rewound, get files from then
于 2013-03-12T19:20:00.130 回答
11

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

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

目前尚不清楚您需要做什么,最可能的解决方案是revert(完全还原较旧的提交或一系列提交)和rebase -i(更改较旧的提交或将其从历史记录中删除)。

于 2013-03-10T23:39:33.903 回答
0

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

还:

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

总帐

来源

于 2020-08-19T17:11:26.787 回答