扔掉git中的本地提交

由于一些糟糕的樱桃采摘,我的本地git存储库目前提交5个提交源,并没有一个良好的状态。 我想摆脱所有这些提交,并重新开始。

显然,删除我的工作目录和重新克隆会做到这一点,但从github再次下载一切似乎是矫枉过正,并没有很好地利用我的时间。

也许git revert是我所需要的,但是我不想在原点(甚至是6)之前提交10个提交,即使它确实让代码本身恢复到正确的状态。 我只是想假装从来没有发生的最后一个半小时。

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


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

  • 未跟踪的文件
  • 未分期的变化
  • 上演但未经承诺的变化

如果你的超额提交只对你可见,你可以做git reset --hard origin/<branch_name>来回到原始位置。

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

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

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

尝试:

 git reset --hard <the sha1 hash> 

重新设置你的头到你想成为的任何地方。 使用gitk来查看你想要的提交。 您也可以在gitk中重置。

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

在这里输入图像说明

在你的分支尝试:

 git reset --hard origin/<branch_name> 

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

要查看/获取您想要返回的提交的sha1 ID

 gitk --all 

回滚到提交

 git reset --hard sha1_id 

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

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

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

git rebase -i HEAD~2 – >它会在最后2次提交

我用'drop'来提交我想删除的签名。