丢弃 Git 中的本地提交

由于某些错误的选择,我的本地 Git 存储库当前比源服务器提前了 5 次提交,并且状态不佳。我想摆脱所有这些提交,然后重新开始。

显然,删除我的工作目录并重新克隆就可以做到,但是再次从 GitHub 下载所有内容似乎有点过头了,并且不能很好地利用我的时间。

也许git revert是我所需要的,但是我不想在源头(甚至六个)之前完成10 次提交,即使它确实使代码本身回到了正确的状态。我只想假装最后一个半小时未曾发生。

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


请注意,这个问题专门针对commits而不是

  • 未跟踪的文件
  • 不分阶段的变更
  • 上演但未提交的更改

答案

如果多余的提交仅对您可见,则只需执行git reset --hard origin/<branch_name>即可返回原点。这会将存储库的状态重置为上一次提交,并将丢弃所有本地更改。

进行git revert会使提交删除提交,从而保持每个人的历史记录正常。

只需删除您的本地 master 分支并按如下方式重新创建它即可:

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

尝试:

git reset --hard <the sha1 hash>

将您的头部重置到您想要的任何位置。使用 gitk 查看您要执行的提交。您也可以在 gitk 中进行重置。

删除最近的提交:

git reset --hard HEAD~1

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

git reset --soft HEAD~1

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

在此处输入图片说明

在您的分支尝试:

git reset --hard origin/<branch_name>

因此,使用 “ git log ” 或 “ git status ” 来验证反转(到没有本地提交的git status )。

git reset --hard @{u} * 删除当前分支上的所有本地更改,包括提交。令我惊讶的是,没有人发布此消息,因为考虑到您不必查找要还原到分支或与分支一起玩的提交。

* 也就是说,重置为@{upstream}的当前分支 - 通常为origin/<branchname> ,但不总是如此

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

gitk --all

回滚到该提交

git reset --hard sha1_id

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

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

git rebase -i HEAD~2 > 它将对最近的两次提交进行重新设置

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

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