由于一些糟糕的选择,我的本地Git存储库目前比原始库提前了五次提交,并且状态不佳。我想摆脱所有这些承诺,重新开始。

很明显,删除我的工作目录并重新克隆就可以了,但再次从GitHub下载所有内容似乎太过了,而且没有很好地利用我的时间。

也许git-restore是我需要的,但我不想在源代码之前提交10次(甚至6次),即使它确实将代码本身恢复到正确的状态。我只想假装最后半小时从未发生过。

有一个简单的命令可以做到这一点吗?这似乎是一个明显的用例,但我找不到任何例子。


请注意,这个问题专门针对提交,而不是:

未跟踪的文件未分级更改已分段但未提交的更改


当前回答

对于那些对Visual Studio解决方案感兴趣的人,以下是演练:

在团队资源管理器窗口中,连接到目标存储库。然后从“分支”中,右键单击感兴趣的分支并选择“查看历史记录”。右键单击历史窗口中的提交,然后选择重置->删除更改(--hard)。

这将丢弃本地提交,并将回购的状态重置为所选提交。也就是说,取消回购后的更改将丢失。

更新

上述程序在VS2019之前运行良好;在VS2022中,有新的Git体验。工作流程类似,但UI有点不同。使用Git菜单中的管理分支,而不是团队资源管理器。现在只需单击左侧的分支,其历史记录将显示在右侧。然后右键单击->重置->删除更改(--hard)

其他回答

要查看/获取提交的SHA-1 id,您也需要返回

gitk --all

回滚到该提交

git reset --hard sha1_id

!笔记在提交之后进行的所有提交都将被删除(以及对项目的所有修改)。因此,首先最好将项目克隆到另一个分支或复制到另一目录。

Try:

git reset --hard <the sha1 hash>

将你的头重置到你想去的任何地方。使用gitk查看你想去哪一个提交。你也可以在gitk内重置。

您可以考虑使用带有drop命令的交互式rebase

比如说最后三次犯罪。。。

git rebase -i HEAD~3

交换拾取命令

pick <hash1> Commit message 1
pick <hash2> Commit message 2
pick <hash3> Commit message 3

用于放置命令

drop <hash1> Commit message 1
drop <hash2> Commit message 2
drop <hash3> Commit message 3

如果您使用的是Atlassian SourceTree应用程序,可以使用上下文菜单中的重置选项。

尝试分支时:

git reset --hard origin/<branch_name>

因此,使用“gitlog”或“gitstatus”验证反转(状态,无本地提交)。