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

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

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

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


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

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


当前回答

TL;博士

在你的树枝上

git reset--hard HEAD^将丢弃最后一次本地提交

git reset--hard HEAD~n将丢弃最后n个本地提交

其他回答

我有一种情况,我想删除一个未被推送的提交,但该提交在另一个提交之前。为此,我使用了以下命令

git rebase-i HEAD~2->它将对最后两次提交进行重新基化

我使用“drop”作为我想要删除的提交签名。

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

使用任意次数,恢复到上次提交,而不删除最近创建的任何文件。

git reset --soft HEAD~1

然后使用

git reset HEAD <name-of-file/files*>

拆下或解开。

git reset --hard <SHA-Code>

如果您在本地副本上犯了一些错误,希望确保不会被错误地推送到远程分支,这将非常有用。

SHA代码可以通过查看git仪表板的webVersion获取,以获取分支上的最后一次提交。

这样,您可以与分支上的最后一次提交同步。

您可以在成功完成硬重置后执行git pull,以确认syn没有任何新内容,即您可以看到消息。

您的分支机构是最新的来源/<分支机构名称>

如果你让你的本地repo变得一团糟,那么在Git中丢弃本地提交的一个可靠方法就是。。。

使用“git-config--getremote.login.url”获取远程源的url将本地git文件夹重命名为“my_broken_local_repo”使用“gitclone<url_from_1>”获取远程git存储库的新本地副本

根据我的经验,Eclipse可以很好地处理周围的世界变化。然而,您可能需要在Eclipse中选择受影响的项目并清理它们,以迫使Eclipse重新构建它们。我想其他IDE可能也需要强制重建。

上述过程的一个副作用是,您将发现您的项目是否依赖于未放入git的本地文件。如果您发现缺少文件,那么可以将它们从“my_broken_local_repo”复制到git中。一旦您确信新的本地存储库具备所需的一切,就可以删除“my_broken_local_repo”。