回到最新提交版本后进行软重置

4

我知道有人已经问过这个问题,但是没有人提供帮助我的解决方案。

我使用GitKraken,显然没有集成功能来检出历史中的旧提交(我进行了一些测试,没有进行任何更改)。现在我知道应该使用git checkout HEAD~n而不是使用软重置。所以GitKraken仍然显示我的更改在那里,并且在我重置到的更改之后。但是我如何回到最新的提交?检出也不起作用。

我不确定GitKraken是否只是错误地显示它,但Git告诉我我重置到的提交是当前HEAD。看起来是正确的。

有什么方法可以恢复以下提交或将它们设置为HEAD?

编辑关于重复标签:引用的线程是关于按照预期的方式返回(我没有这样做)通过检出先前的提交。由于我进行了软重置,我的主分支的HEAD不再是实际的最新提交,而是我将本地存储库重置到的提交。使用git reflog与重置有助于撤消所做的操作。


你能否解释一下你试图做什么?目前这只是一个没有上下文的尝试清单。 - Liam
回到一个比当前HEAD更新的提交,因为我对它进行了重置(在它之后有5个提交)。但是Git显然没有意识到这一点。当我重置到最新的提交时,它似乎颠倒了那些实际上所做的更改,而不是恢复它们... - SharpShade
可能是重复的问题:如何在Git中返回最近版本? - Liam
它可能解决了问题,但从我的角度来看,如果没有进一步损害存储库的风险,这看起来不会像是能够满足我的目的。所以我会说我的问题有点不同,尽管解决方案可能是相同的。 - SharpShade
1个回答

10

从分支的引用日志获取它。

git reflog [show] [log-options] [<ref>]

所以在你的情况下只需

git reflog branch-to-be-fixed

它将输出分支上先前操作的列表

59a04ab96 branch-to-be-fixed@{1}: commit: ...message...

574c5ca23 branch-to-be-fixed@{2}: commit: ...message...

此时,根据其消息或哈希在输出中找到您需要的提交,并使用该句柄重置到所需状态:

git reset --hard branch-to-be-fixed@{1}

2
git checkout HEAD 就足够了。使用 reset --hard 就像用铁锤敲开一个鸡蛋一样过度了。 - Liam
3
你需要小心处理这个。例如,如果你有一个分支被检出, reset --hard 命令会移动该分支,并可能删除该分支指向的任何提交记录。reset 确实是用于移动分支的,而不考虑后果。如果你不小心使用它,它会给你带来很多麻烦。相比之下,checkout 更加安全。 - Liam
@Liam 是的,但在这种情况下,要修复的当前分支被暗示为执行reflogreset的上下文。在git reset --soft之后,我不明白如何使用git checkout HEAD(因为HEAD现在指向错误的提交)...我错过了什么? - Romain Valeri
应该是master(或其他名称)。我不经常使用命令行。我只是指出它可能非常危险。reset应该极度谨慎地使用,因为它很容易导致代码丢失。 - Liam
1
我认为RomainValeri是正确的。虽然我尝试检出HEAD,但由于当前HEAD是我重置的提交,所以它没有做任何事情。但我会记住这一点,不会轻易地进行重置。 - SharpShade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接