丢弃Git中的本地提交


Throw away local commits in Git

由于一些错误的挑选,我的本地Git存储库目前比源站提前五次提交,并且状态不好。我想摆脱所有这些承诺,重新开始。

显然,删除我的工作目录并重新克隆可以做到这一点,但是再次从Github下载所有内容似乎太浪费时间了,而且没有很好地利用我的时间。

也许我需要的是git revert,但我不想在源代码之前(甚至是6个)完成10个提交,即使它确实使代码恢复到正确的状态。我只想假装过去半小时从未发生过。

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

请注意,这个问题是关于提交的,而不是关于:

  • 未跟踪文件
  • 未老化的变化
  • 阶段性但未提交的更改


如果你的超额承诺只对你可见,你可以这样做git reset --hard origin/移回原点所在的位置。这将把存储库的状态重置为上一次提交,并放弃所有本地更改。

做一个git revert会使新的承诺以一种保持每个人历史健全的方式消除旧的承诺。


只需删除您的本地主分支并像这样重新创建它:

1
2
git branch -D master
git checkout origin/master -b master


尝试:

1
git reset --hard <the sha1 hash>

把你的头重置到你想去的地方。使用Gitk查看您要进行的提交。你也可以在Gitk中进行重置。


删除最新提交:

git reset --hard HEAD~1

删除最近的提交,而不破坏您所做的工作:

git reset --soft HEAD~1


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

enter image description here


尝试分支时:

1
git reset --hard origin/<branch_name>

使用"EDOCX1"〔2〕或"EDOCX1"〔3〕验证撤销(对国家,无本地承诺)。


git reset --hard @{u}删除当前分支上的所有本地更改,包括提交。我很惊讶还没有人发布这个消息,因为您不必查找要恢复或使用分支的承诺。

*也就是说,重置到@{upstream}处的当前分支-通常为origin/,but not always


要查看/获取提交的sha-1 ID,您也要返回

1
gitk --all

回到那个承诺

1
git reset --hard sha1_id

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


对于未被推送的本地提交,也可以使用git rebase -i删除或挤压提交。


我曾遇到过这样一种情况,我想删除一个未被强制执行的提交,但提交是在另一个提交之前。为此,我使用了以下命令

git rebase -i HEAD~2->将重新调整最后两次承诺

我使用了"drop"来删除提交签名。


删除未跟踪的文件(未提交的本地更改)

1
git clean -df

永久删除所有本地提交并获取最新的远程提交

1
git reset --hard origin/<branch_name>


1
git reset --hard <SHA-Code>

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

可以通过查看Git仪表板的WebVersion来获取sha代码,以便在分支上进行最后一次提交。

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

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

你的分支机构与Origin/是最新的