合并相邻提交及其还原

时间:2012-10-29 23:53:52

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

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

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

其中每个字母都是提交。看来C是B的回复,所以基本上历史与

相同
A --> D

有没有办法“总结”B和C提交?这些变化尚未推出。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

除了交互式rebase,一个简单的方法是:

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

答案 2 :(得分:0)

最简单的方法是重置:

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

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