我想知道如何删除提交。
通过 delete
,我的意思是,就好像我没有做出那样的提交,当我将来推动时,我的更改不会推送到远程分支。
我读了git help,我认为我应该使用的命令是 git reset --hard HEAD
。它是否正确?
我想知道如何删除提交。
通过 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
如果你想摆脱WORK IN PROGRESS,那就太好了。它会将您重置为最近的提交,并清除工作树和索引中的所有更改。
最后,如果您需要查找“已删除”的提交,则通常会将其存在 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将完成剩余的工作,仅删除该提交,并将所有其他提交重新放回日志中。
我正在附上这个答案,因为我不明白为什么那些刚刚尝试提交工作的人会因为使用Git的一些错误而删除所有工作!
如果你想保留你的工作并且只是'撤消'那个提交命令(你在推送回购之前就抓住了):
git reset --soft HEAD~1
不要使用--hard 标志,除非您想要销毁自上次提交以来正在进行的工作。
如果您没有发布更改,则可以执行删除最新提交
$ git reset --hard HEAD^
(请注意,这也会删除所有未提交的更改;请谨慎使用)。
如果您已经发布了要删除的提交,请使用 git revert
$ git revert HEAD
删除整个提交
git rebase -p --onto SHA^ SHA
显然用您想要删除的引用替换“SHA”。该命令中的“^”是文字。
git reset --hard commitId
git push <origin> <branch> --force
PS:CommitId指的是您想要恢复的那个