How can I delete a commit to git
我想摆脱远程分支上的一些提交。 例如,如果历史记录如下:
1 | A->B->C->D |
我想删除C和D给我:
1 | A->B |
哪个B现在是HEAD?
我将列出为您删除提交的所有不同方法以及何时应该使用它们。
在你做任何这些之前,我强烈建议你将你的分支机构复制到另一个分支机构,以确保安全。
通过执行
如果你已经推动了,就像在你的情况下,你可以跳到#3,但如果你没有推,你可以看看1和2。
1)我还没有推或没有单独工作,我想删除的提交是最近的提交:
如果我有:
A B C D
我想删除C和D.
然后做
这导致:
A ---乙
如果你已经推动了,就像在你的情况下,你仍然可以这样做,然后做一个
2)我还没有推或我独自工作,我要删除的提交是在我的分支中间:
如果我有:
A B C D
我想删除C.
1 | git rebase -i sha_of_B_the_commit_before_the_one_i_want_to_delete |
这打开了非常有用的交互式rebase屏幕:
1 2 | pick sha_of_C C pick sha_of_D D |
当git提示你"#如果你在这里删除一行,那么COMMIT将会丢失。"这就是我们要做的。
我删除了
1 | pick sha_of_D D |
我用vq将其保存在vi中,结果是:
A --- ---乙d
如果你已经推动了,就像在你的情况下,你仍然可以这样做,然后做一个
3)我已经推了,我正和其他人一起工作:
如果我有:
A B C D
我想删除C和D.
然后做
1 | git revert sha_of_D |
请注意,您可能必须在此处解决冲突然后提交。
然后做
1 | git revert sha_of_C |
请注意,您可能必须在此处解决冲突然后提交。
这导致:
A --- ---乙?--- --- d --- Reverted_D Reverted_C
这是可以安全推送的,因为你实际上只是添加一个提交来反转所有C和D的更改,实际上是删除它。
除非绝对必要,否则通常应该不惜一切代价避免
希望这很有帮助。
担
删除上次提交
1 | $ git reset --hard HEAD^ |
删除最新的2次提交
1 | $ git reset --hard HEAD~2 |
您可以在本地下载分支。然后删除提交并执行push -force
1 2 3 4 5 | $ git pull origin $ git checkout origin/<branchname> $ git checkout -b <branchname> $ git reset --hard HEAD~2 $ git push origin <branchname> --force |