从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将完成其余的工作,只删除该提交,并将所有其他工作重新放回到日志中。
上一篇: Delete commits from a branch in Git
下一篇: Reset or revert a specific file to a specific revision using Git?