如何删除未经删除的git提交?

Nul*_*uli 838 git

我不小心犯了错误的分支.如何删除该提交?

dby*_*rne 1587

删除最近的提交,保留您已完成的工作:

git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)

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

git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)

  • 并确保HEAD~1是提交...你也可以做`git reset --hard origin` (112认同)
  • 我觉得`git remote`列出了我的起源,`git reset --hard origin`说`fatal:ambiguous argument'origin':未知的修订或路径不在工作树中.为什么? (12认同)
  • 确保HEAD指向分支..(先检查出来) (9认同)
  • 这太棒了.刚救了我的命. (7认同)
  • `git reset HEAD~1`也将保留所有更改,但会留下一个空索引,而不是保留所有内容(如`--soft`选项所示). (2认同)
  • 为什么这会被点赞?这是完全错误的,并没有回答 OP 的问题。运行`git log HEAD@{1} -1` 仍然会向你显示你认为“销毁”的提交。 (2认同)

Ash*_*ous 65

我不知道为什么我找到的最佳答案只是在评论中!由丹妮丝以86票赞成

git reset --hard origin
Run Code Online (Sandbox Code Playgroud)

此命令将使本地存储库与远程存储库同步,从而消除您对本地存储库所做的所有更改。

  • 为此,请稍加扩展说明:对于特定分支:git reset --hard origin / <branch> (8认同)
  • 如果想摆脱提交但保留本地工作,则可以使用`git reset --soft origin / <branch>`。 (3认同)
  • 我得到`致命:不明确的参数'origin':未知修订版或路径不在工作树中。`,您需要指定分支,例如:`git reset --hard origin/feature/my-cool-stuff` (3认同)
  • 杰出的!这实际上是有效的,不像“已接受”的答案,它只是分离头部并让你悬而未决。 (3认同)

Von*_*onC 54

不要删除它:只需一次提交即可git cherry-pick.

但是如果你在错误的分支上有几个提交,那就是git rebase --onto闪耀的地方:

假设你有这个:

 x--x--x--x <-- master
           \
            -y--y--m--m <- y branch, with commits which should have been on master
Run Code Online (Sandbox Code Playgroud)

,然后你可以标记master并移动到你想要的位置:

 git checkout master
 git branch tmp
 git checkout y
 git branch -f master

 x--x--x--x <-- tmp
           \
            -y--y--m--m <- y branch, master branch
Run Code Online (Sandbox Code Playgroud)

,重置y分支应该在哪里:

 git checkout y
 git reset --hard HEAD~2 # ~1 in your case, 
                         # or ~n, n = number of commits to cancel

 x--x--x--x <-- tmp
           \
            -y--y--m--m <- master branch
                ^
                |
                -- y branch
Run Code Online (Sandbox Code Playgroud)

,最后移动你的提交(重新申请,实际上是新的提交)

 git rebase --onto tmp y master
 git branch -D tmp


 x--x--x--x--m'--m' <-- master
           \
            -y--y <- y branch
Run Code Online (Sandbox Code Playgroud)

  • @KatariaA 这是删除在错误分支上完成的提交的有效替代方法,并将在相同情况下帮助其他人(在错误分支上完成的良好提交)。 (3认同)
  • 不幸的是,这不是问题所在。 (2认同)

Han*_*Gay 11

执行git rebase -i FAR_ENOUGH_BACK并删除您不想要的提交行.


Ale*_*roß 6

如果要将该提交移动到另一个分支,请获取有问题的提交的SHA

git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)

然后切换当前分支

git checkout other-branch
Run Code Online (Sandbox Code Playgroud)

cherry-pick承诺other-branch

git cherry-pick <sha-of-the-commit>
Run Code Online (Sandbox Code Playgroud)


Atu*_*eka 5

以下命令对我有用,所有本地提交的更改都被删除,本地被重置为与远程源/主分支相同。

git reset --hard 原点

  • 这是 /sf/answers/3802632151/ 的副本 (2认同)