【问题标题】:Git remove root commitGit删除根提交
【发布时间】:2011-09-03 05:16:00
【问题描述】:

我不能用 git 做很多事情,我想从我的 repo 中删除一个提交,因为我上传了错误的东西。

我使用了git revert <the_commit>,但由于提交是 root 并且我无法删除它。 致命:无法还原根提交

这种情况该怎么办?

请不要在这里给我指向其他主题的链接,我阅读了它们但我不明白该怎么做,我需要一些关于删除某些提交的基本示例。

【问题讨论】:

    标签: git commit root


    【解决方案1】:

    您可以使用git filter-branch 执行此操作。首先,确定要删除的根目录中的提交 ID。我会用<the_commit> 来代表它。然后,使用--parent-filtersed 命令运行git filter-branch 来剪断该父级:

    git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
    

    这是我刚刚尝试过的示例的抄本:

    $ git log
    commit 7e1ba37b51fc2cc6289cf66367c9aedc74c664a8
    Author: Greg Hewgill <greg@example.com>
    Date:   Fri May 27 20:54:27 2011 +1200
    
        three
    
    commit a8a410d2361824cbd518a48225e9402a691be93f
    Author: Greg Hewgill <greg@example.com>
    Date:   Fri May 27 20:54:17 2011 +1200
    
        two
    
    commit 3171d512d98f6bc5f3c2469312930c0d32d3aa07
    Author: Greg Hewgill <greg@example.com>
    Date:   Fri May 27 20:54:00 2011 +1200
    
        one
    $ git filter-branch --parent-filter "sed 's/-p 3171d512d98f6bc5f3c2469312930c0d32d3aa07//'" HEAD
    Rewrite 7e1ba37b51fc2cc6289cf66367c9aedc74c664a8 (3/3)
    Ref 'refs/heads/master' was rewritten
    $ git log
    commit 489ec1ee20e0dd20cd835ceebf157f628cd75a44
    Author: Greg Hewgill <greg@example.com>
    Date:   Fri May 27 20:54:27 2011 +1200
    
        three
    
    commit a6f5ee410c9ea4fca6fbff265149b7fc555241eb
    Author: Greg Hewgill <greg@example.com>
    Date:   Fri May 27 20:54:17 2011 +1200
    
        two
    $ 
    

    【讨论】:

    • 这是一个非常有用的答案,我已经验证它有效。谢谢!
    【解决方案2】:

    要删除根提交,您只需删除可以访问的所有分支(和标签)。

    这可以通过git branch -D branch-name 完成。 (您必须首先检查另一个不引用此根提交的分支,因为我认为您无法删除当前分支。)

    如果你想保留这个分支上的其他提交并且只删除根,git filter-branch 更好,请参阅 Greg 的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-09
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2023-02-08
      • 1970-01-01
      相关资源
      最近更新 更多