我怎样才能删除提交给git

这个问题在这里已经有了答案:

  • 从Git中的分支中删除提交23个答案

  • 我将阐述所有不同的方式来为您删除提交,以及何时应该使用它们。 在你做任何这些之前,我强烈建议你将分支复制到另一个分支以保证安全。

    通过执行git checkout -b copy_branch来完成此git checkout -b copy_branch ,然后通过执行git checkout -b copy_branch切换回原始分支git checkout the_branch_i_want_to_delete_from_again

    如果你已经推动了,就像你的情况一样,你可以跳到#3,但是如果你没有推动,你可以看看1和2。

    1)我还没有推或者正在单独工作,我想删除的提交是最近的提交:

    如果我有:A --- B --- C --- D

    我想删除C和D.

    然后做git reset --hard sha_of_B

    其结果是:A --- B

    如果你已经推出了,就像你的情况一样,你仍然可以这样做,然后做一个git push --force origin the_branch ,但不建议这样做,因为你可能会让其他人搞砸这个项目。 你应该按照#3代替。

    2)我还没有推或者正在单独工作,我想移除的提交在我的分支中:

    如果我有:A --- B --- C --- D

    我想要删除C.

    git rebase -i sha_of_B_the_commit_before_the_one_i_want_to_delete
    

    这打开了非常有用的交互式底图屏幕:

    pick sha_of_C C
    pick sha_of_D D
    

    因为git提示你“#如果你在这里删除一行,那么这个提交将会丢失。” 这就是我们要做的。

    我删除了行pick sha_of_C C ,这留给我:

    pick sha_of_D D
    

    我用vi保存在vi中,结果如下:

    A --- ---乙d

    如果你已经推出了,就像你的情况一样,你仍然可以这样做,然后做一个git push --force origin the_branch ,但不建议这样做,因为你可能会让其他人搞砸这个项目。 你应该按照#3代替。

    3)我已经推动,我正在与其他人一起工作:

    如果我有:A --- B --- C --- D,我想删除C和D.

    然后做

    git revert sha_of_D
    

    请注意,您可能需要在这里解决冲突,然后提交。 然后做

    git revert sha_of_C
    

    请注意,您可能需要在这里解决冲突,然后提交。

    这导致:

    A --- ---乙Ç--- --- d --- Reverted_D Reverted_C

    这是可以安全推动的,因为你实际上只是添加了一个提交,它反转了C和D的所有更改,实质上删除了它。

    除非绝对必要,否则你通常应该避免不惜一切代价地进行git push --force 但是,如果你要做一个推动力,使用保护,你应该在做之前一定要制作一份你的分支。 如果你已经推动了,那么坚持#3通常是一个很好的规则。

    希望这是有帮助的。


    删除最后一次提交

    $ git reset --hard HEAD^
    

    删除最新的2个提交

    $ git reset --hard HEAD~2
    

    您可以在本地下载分支。 然后删除提交并执行推送

    $ git pull origin
    $ git checkout origin/<branchname>
    $ git checkout -b <branchname>
    $ git reset --hard HEAD~2
    $ git push origin <branchname> --force
    
    链接地址: http://www.djcxy.com/p/8997.html

    上一篇: How can I delete a commit to git

    下一篇: Completely remove commit from git database