如何从LOG中删除'git commit',就像它从未存在过一样

Rod*_*igo 9 git

我在其中一个提交中犯了一个错误.现在我想完全删除这个提交,所以看起来它从来就不存在.我不想在日志中看到这个.

我已经尝试了这个问题的所有提示(" 如何删除'git commit' "),但我可以在日志中看到提交.我怎么能完全删除它?

- 编辑 -

好的,我没有提供完整的信息.凯文巴拉德是对的.

到现在为止,我没有推动这个提交,它只在我的机器上.该ouah答案工作,命令

git log
Run Code Online (Sandbox Code Playgroud)

不会显示,但命令是什么

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

do是"chekout last commit并将分支更改为this",所以我继续看到使用SmartGit等图形程序进行提交.

- 编辑2--

不,这是一个SmartGit漏洞!!!! 提交真的消失了.我必须关闭日志窗口,然后再打开.提交不再存在.

oua*_*uah 13

如果是最后一次提交

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

如果它不是最后一次提交

git rebase -i commit_hash^
Run Code Online (Sandbox Code Playgroud)

编辑器将打开,用提交删除整行,保存并退出.

请注意,如果分支已被推送,则重写历史记录或重新定位通常是个坏主意,您可能更愿意使用

git revert commit_hash
Run Code Online (Sandbox Code Playgroud)

这将添加一个恢复提交的新提交commit_hash.

  • 如果你试图删除一个提交,你也可以使用`git rebase --onto $ SHA1 ^ $ SHA1`(其中`$ SHA1`是要删除的提交).此外,这还有一个警告,它不会重现合并.你可以给它`-p`标志来尝试重现合并,但是如果你删除的提交对任何合并分辨率有影响,它可能无法正常工作.另请注意,将`-p`与`-i`混合是一个坏主意(请参阅git-rebase联机帮助页中的BUGS部分). (3认同)

kno*_*cte 5

这个命令(注意,它会重写历史记录):

git rebase --onto commitHash^ commitHash
Run Code Online (Sandbox Code Playgroud)

(@ouah 的解决方案对我不起作用,而 Lily 的解决方案对我有用,但他的解决方案不应该是评论,而应该是这样的答案。)