【问题标题】:Remove Commit from Repository History [duplicate]从存储库历史记录中删除提交 [重复]
【发布时间】:2012-12-14 18:18:33
【问题描述】:

可能重复:
How to delete a ‘git commit’

知道这会改变历史记录,我想从存储库的历史记录中删除一些意外提交。我希望所有其他提交保留其存储库的状态。所以我要删除的提交的更改将被它们之后的提交覆盖。

我怎样才能在 Git 中做到这一点,我怎样才能将它也应用到或仅应用到 Github 上的存储库?

【问题讨论】:

    标签: git github commit


    【解决方案1】:

    如果我理解正确,“挤压”就是你想要的。

      -A-B-C-D-E-F-G-H
    

    鉴于上述历史记录,您应该在要压缩的第一个提交之前选择提交。假设您要将 F 和 E 压缩为 D,H 压缩为 G,所以第一个之前的提交是 C。

      git rebase -i C
    

    您将看到一个编辑器,其中包含一个包含如下内容的文本文件:

    pick D
    pick E
    pick F
    pick G
    pick H
    

    修改为:

    pick D
    squash E
    squash F
    pick G
    squash H
    

    您将被要求查看新提交的提交消息,

    生成的历史将如下所示:

      -A-B-C-D'-G'
    

    请注意您总是将较新的提交压缩到较旧的提交中,反之亦然。因此pick Gsquash H。把它想象成在你的历史继续前进之后修改一个提交。

    PS:要将其放入您的 GitHub 存储库,您必须强制推送 git push -f origin(假设 origin 是您的 GitHub 远程)。

    PPS:有关详细信息,请参阅man page of git-rebase

    【讨论】:

    • 那我的历史会变成A-B-C-D-G?
    • 这是-A-B-C-D'-G',我编辑了我的答案。但是D'=D+E+FG'=G+H
    • 以后的提交会受到影响吗?例如,如果我从A-B-C-D 开始,然后将C 压缩为B。结果是A-B'-D 还是A-B'-D'
    • 后者。变基总是会在第一次更改提交后重写整个历史记录,即使您只更改提交消息。
    • 这很可悲,但我理解。难道没有办法将提交压缩到 next 中吗?这对我来说很重要,因为这两个提交的作者不同。
    猜你喜欢
    • 2014-06-24
    • 2023-01-22
    • 2019-03-17
    • 2011-05-29
    • 2014-11-20
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多