首页 文章

扔掉git中的本地提交

提问于
浏览
1031

由于一些糟糕的挑选,我的本地git存储库目前在原点之前提交了5个提交,并且状态不佳 . 我想摆脱所有这些提交并重新开始 .

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

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

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


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

  • 未跟踪文件

  • 非分期更改

  • 暂存但未提交的更改

10 回答

  • 203

    如果您的超额提交仅对您可见,您可以执行 git reset --hard origin/<branch_name> 以返回原点所在的位置 .

    做一个 git revert 进行新的提交以删除旧的提交,以保持每个人的历史正确 .

  • 1786

    只需删除您的本地主分支并重新创建它,如下所示:

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

    尝试:

    git reset --hard <the sha1 hash>
    

    将头重置到你想要的任何地方 . 使用gitk查看您想要的提交 . 你也可以在gitk中重置 .

  • 41

    如果您使用的是 Atlassian SourceTree app,则可以使用上下文菜单中的reset选项 .

    enter image description here

  • 10

    删除最近的提交:

    git reset --hard HEAD~1

    删除最近的提交,而不会破坏您已完成的工作:

    git reset --soft HEAD~1

  • 11

    在您的分支尝试:

    git reset --hard origin/<branch_name>
    

    使用“ git log " or " git status ”验证反转(到状态,没有本地提交) .

  • 7

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

    gitk --all
    

    回滚到该提交

    git reset --hard sha1_id
    

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

  • 36

    git reset --hard @{u} *删除当前分支上的所有本地更改,包括提交 . 我必须查找提交恢复或使用分支的内容 .

    *也就是说,重置为@ - common-origin / <branchname>的当前分支,但并非总是如此

  • 28

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

  • 151

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

    git rebase -i HEAD~2 - >它将改变最后2次提交

    我使用'drop'作为我想删除的提交签名 .

相关问题