【问题标题】:Changing history in Github改变 Github 的历史
【发布时间】:2016-03-31 08:24:13
【问题描述】:

我正在学习 Github,但遇到了问题。

我完成了这一天,并将代码推送到存储库。
然后我意识到我已经注释掉了不再需要的代码。
我意识到这是一种糟糕的风格,所以将其删除并再次推送。

现在连续两次有相同的提交消息看起来有点奇怪。

应该/可以做什么?
我应该再次推送并使消息“次要”还是“删除注释掉的代码”。

我不想弄乱历史。

有没有办法完全删除推送的历史记录(或任何名称)?

【问题讨论】:

  • 你总是可以回到那个提交,amend它,然后强制推送git push -f

标签: git github maintainability


【解决方案1】:

在这种情况下,您可以执行 git reset HEAD --hard,删除 cmets,提交最终版本并强制推送它们(使用 git push -f origin branchname),这样您就可以对所有更改进行一次提交,而不是两个。

但是,我不推荐上述方法,提交在 git 中的成本并不高。相反,在这种情况下,一个更好的提交消息,例如 git commit -m "removed commented chunks of code" 用于第二次提交会给您留下更清晰的历史记录。 IMO,这里的问题不是多次提交,而是第二次提交的错误提交消息

我建议您更改使用 git commit --amend 进行的第二次提交的提交消息,然后强制推送分支。

【讨论】:

    【解决方案2】:

    我意识到这是不好的风格,所以删除它并再次推送。

    这里有 2 个选项:

    1. 在旧代码之上替换并提交新代码
    2. 从存储库中删除旧代码。

    选项 2 表示 rebase,如果您不是唯一使用此分支的人,这将是破坏性的。

    因此,由于您已经推送了分支,因此您没有太多选择,您将不得不更改代码并再次提交。


    有没有办法完全删除推送的历史记录(或任何名称)?

    主要选项:

    1. 还原
    2. 变基

    revert

    还原将撤消您的更改。
    Revert 不是破坏性的,因为它不会改变历史,它会在当前历史之上添加一个新的 undo 提交

    git revert <SHA-1>
    

    rebase

    如上所述 - 一种破坏性的操作,它将在您的历史记录之后发生,并且您希望避免它,因为您已将分支发布到远程存储库。

    【讨论】:

      【解决方案3】:

      如果您有更大的历史重写工作要做,请查看git rebase -i OLD_COMMIT..HEAD 或类似的。

      但请注意当您push -f 到 github 分支时您必须通知该分支的所有用户。这也适用于任何共享存储库。由于 github 主要用于共享代码,请记住,您可能需要通知所有推送到共享分支的开发人员您更改了历史记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-24
        • 2021-01-06
        • 2011-10-26
        • 2018-05-02
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        • 2018-11-04
        相关资源
        最近更新 更多