从Git的分支中删除提交

我想知道如何删除提交。

通过delete ,我的意思是,就好像我没有做出这样的承诺,并且当我在将来推进时,我的更改不会推送到远程分支。

我读git help,我认为我应该使用的命令是git reset --hard HEAD 。 它是否正确?


小心: git reset --hard将删除您的工作目录更改。 运行此命令之前,请务必隐藏您想保留的任何本地更改

假设你坐在那个提交上,那么这个命令会怪怪它......

git reset --hard HEAD~1

HEAD~1表示头部之前的提交。

或者,您可以查看git log的输出,找到要备份的提交的提交ID,然后执行以下操作:

git reset --hard <sha1-commit-id>

如果你已经推动它,你将需要做一个强制推动来摆脱它...

git push origin HEAD --force

但是 ,如果其他人可能已经把它拉了,那么你最好开一个新的分支。 因为当他们拉扯时,它会将它合并到他们的工作中,并且你会让它再次推回。

如果你已经推动了,最好使用git revert来创建一个“镜像镜像”提交,它将撤销这些更改。 但是,这两个提交都将在日志中。


仅供参考 - git reset --hard HEAD非常棒,如果你想摆脱正在进行的工作。 它会将您重置为最近的提交,并清除工作树和索引中的所有更改。


最后,如果你需要找到一个你已经“删除”的提交,它通常会出现在git reflog除非你有垃圾收集你的存储库。


如果你还没有在任何地方推送提交,你可以使用git rebase -i删除提交。 首先,了解该提交的距离(大约)。 然后做:

git rebase -i HEAD~N

所述~N指衍合最后N提交( N必须是一个数,例如HEAD~10 )。 然后,您可以编辑Git提供给您的文件以删除违规提交。 在保存该文件时,Git会重写所有以下提交,就好像您删除的提交不存在一样。

Git Book有很多关于图片和示例重新印刷的章节。

不过要小心,因为如果你改变了你在其他地方推动的东西,除非你打算推动力量,否则将需要另一种方法。


另一种可能性是我个人最喜欢的命令之一:

git rebase -i <commit>~1

这将在交互模式下开始rebase -i ,在您想要重击之前的那一刻。 编辑将从此开始列出所有提交。 删除包含要删除的提交的行并保存该文件。 Rebase将完成其余的工作,只删除该提交,并将所有其他工作重新放回到日志中。

链接地址: http://www.djcxy.com/p/147.html

上一篇: Delete commits from a branch in Git

下一篇: Reset or revert a specific file to a specific revision using Git?