【问题标题】:How to remove specific commits from Git? [duplicate]如何从 Git 中删除特定的提交? [复制]
【发布时间】:2018-03-25 05:53:26
【问题描述】:

我想从我的远程存储库中删除一些提交。我的仓库中很少有这样的提交:

commits    messages

abcd123    some message
xyze456    another commit message
98y65r4    this commit is not required
987xcrt    this commit is not required
bl8976t    initial commit

我想从我的仓库中删除提交 98y65r4987xcrt。如何实现?

【问题讨论】:

    标签: git


    【解决方案1】:

    对此有两种选择:一种是安全的,一种是给你留下肮脏的 git 历史,另一种是不安全,给你留下干净的 git 历史。你选择:

    选项 1:还原

    你可以告诉 git “恢复提交”。这意味着它将引入一个更改,该更改会还原您在提交中所做的每个更改。您需要执行两次(每次提交一次):

    git revert 98y65r4
    git revert 987xcrt
    

    此解决方案将像这样留下您的 git 历史记录(您可以执行 gitk --all 以查看您的 repo 状态的图形表示):

    2222222    revert of 987xcrt: this commit is not required
    1111111    revert of 98y65r4: this commit is not required
    abcd123    some message
    xyze456    another commit message
    98y65r4    this commit is not required
    987xcrt    this commit is not required
    bl8976t    initial commit
    

    然后你可以将新的 2 个提交推送到你的远程仓库:

    git push
    

    此解决方案是安全的,因为它不会对您的远程仓库进行破坏性操作。

    选项 2:交互式变基

    您也可以为此使用交互式变基。命令是:

    git rebase -i bl8976t
    

    在其中,您告诉 git 让您选择要混合在一起的提交,重新排序或 删除

    当你执行命令时,一个编辑器会打开一个类似下面的文本:

    pick    bl8976t    initial commit
    pick    987xcrt    this commit is not required
    pick    98y65r4    this commit is not required
    pick    xyze456    another commit message
    pick    abcd123    some message
    

    继续删除你不想要的行,像这样:

    pick    bl8976t    initial commit
    pick    xyze456    another commit message
    pick    abcd123    some message
    

    保存文件并关闭编辑器。

    到目前为止,这仅修改了您存储库的本地副本(您可以使用gitk --all 看到提交树)。

    现在您需要将更改推送到您的仓库,这是通过“推力”完成的,但在执行命令之前请记住,推力是一种破坏性操作,它将覆盖您的远程存储库,并且可能会给其他使用它的人带来合并麻烦。如果你没问题,想做推力,命令是:

    git push -f
    

    【讨论】:

    • 交互式变基不止一次帮助了我..
    • 如果我有两个开发人员在共享远程仓库中工作,其中一个提交到错误的分支并将这些更改合并到集成级别分支,有没有办法可以解决他们的问题?这些提交的历史记录在其他两个开发人员本地存储库中,而不是在我的。
    • 最后一点,您可以使用git push --force-with-lease,检查您的分支和上游分支之间是否有任何差异,同时是否有其他人推送了任何更改。
    • 交互式变基挽救了我的婚姻
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 2021-02-24
    • 2021-10-21
    • 2018-11-14
    • 2023-03-21
    • 2012-12-12
    • 2020-06-19
    • 2018-07-04
    相关资源
    最近更新 更多