【问题标题】:How to edit an old commit without affecting the one after it如何在不影响之后的提交的情况下编辑旧提交
【发布时间】:2022-01-15 23:19:13
【问题描述】:

我有 2 个提交,我们称它们为 A 和 B,B 是一个很好的提交,但 A 有一些文件需要删除,而且我对 git 有点陌生,所以我真的不知道该怎么做这种情况。

顺便说一句,使用 bitbucket。

【问题讨论】:

    标签: git bitbucket


    【解决方案1】:

    这里有 2 种更新提交的机制(它们都没有真正更新提交 - 它们是不可变的):

    1. 您基于另一个提交创建了一个新提交(通过修改、变基、重置、过滤分支等多种方式进行)。您的下一次提交也必须开始引用新的提交,因此也必须复制这些提交。所有提交都将获得新的哈希值。如果没有人引用旧的提交,那么在某些时候它们将被 GC'ed。
    2. git replace 与另一个提交。这会保留旧的和新的提交。只是当 Git 看到对旧的引用时,它会假装引用另一个。

    第一个选项是从 git 存储库中删除提交及其数据的真正方法。但它是侵入性的,需要用力推动。第二个选项是轻量级的,不需要重新创建提交历史。但它并没有真正删除它们指向的错误提交和数据——仍然可以找到它们,只是变得更难了。

    【讨论】:

      【解决方案2】:

      更合适的解决方案可能是git rebase。提交 B 保持不变,而提交 A 被编辑。

      例如。

      git rebase -i HEAD~2

      将 rebase 来自 HEAD 的 2 个提交。其中 HEAD 是当前提交

      git 接下来会提示你描述你想对每个提交做什么。在列表中找到提交 A 并将第一个单词替换为 edit 然后退出并保存(很可能您在 vim 中)。这将使您的 git 处于可以继续进行编辑的状态,例如 git rm -f --cached somefile.txt。

      完成编辑后,只需运行git rebase --continue 即可。使用 git rebase 编辑的提交 A

      【讨论】:

        猜你喜欢
        • 2014-10-23
        • 2020-06-28
        • 2014-08-04
        • 2021-02-15
        • 2019-12-08
        • 2023-03-23
        • 2020-01-04
        • 2015-10-01
        • 1970-01-01
        相关资源
        最近更新 更多