【问题标题】:Coalescing adjacent commit and its revert合并相邻提交及其还原
【发布时间】:2012-10-19 08:10:52
【问题描述】:

我有一个特殊的提交日志,看起来像这样,

A --> B --> C --> D

每个字母都是一个提交。看起来 C 是 B 的还原,所以基本上历史将与

A --> D

有没有办法“总结” B 和 C 的提交?更改尚未推送。

【问题讨论】:

  • 交互式变基将允许您执行此操作。

标签: git version-control commit git-commit git-revert


【解决方案1】:

您可以执行 git rebase -i HEAD~3 并删除 TODO 列表中代表 BC 提交的行并执行 rebase。

【讨论】:

    【解决方案2】:

    除了交互式变基之外,一个简单的方法是:

    git reset --hard A     # reset current branch to A
    git cherry-pick D      # transplant commit D here
    

    还有一个更通用的命令,当 C-D 是一个完整的提交范围时效果会更好:

    git rebase --onto A C  # transplant C..D onto A
    

    【讨论】:

      【解决方案3】:

      最简单的方法是重置:

      git reset --soft HEAD^^^
      git add -A
      git commit -C HEAD@{1}
      

      第一个命令使 A 成为当前提交,同时保持工作树就像它在 D 中一样。我们使用下一个命令暂存工作树的状态。接下来,我们使用来自提交 D 的消息进行提交(HEAD 是 1 次之前)。

      【讨论】:

        猜你喜欢
        • 2011-12-19
        • 2021-07-28
        • 2014-01-03
        • 1970-01-01
        • 2018-04-19
        • 2012-12-29
        • 2021-12-09
        • 1970-01-01
        • 2017-07-06
        相关资源
        最近更新 更多