【问题标题】: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 列表中代表 B 和 C 提交的行并执行 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 次之前)。