让我们说我们的提交历史似乎是
1--2--3--4 ^ HEAD
其中4是最近的提交。
有没有办法将提交2(2和1之间的差异)的更改重播到提交4?
你可能想知道为什么有人想这样做。让我们说这是你的生产分支,总是应该处于工作状态。让我们更早地说,当提交历史看起来像
1--2 ^ HEAD
你有一个实现,并认为提交2可能会破坏一切,所以你很快就推出了一个恢复提交,其中提交3恢复提交2.然后有人使提交4包含你想要保留的好内容。此时您意识到提交2实际上是正常的,因此您希望在4之上重播它。
答案 0 :(得分:10)
git cherry-pick A
可以做到这一点。
见http://git-scm.com/docs/git-cherry-pick
给定一个或多个现有提交,应用每个引入的更改,为每个提交记录一个新提交。这需要您的工作树是干净的(没有HEAD提交的修改)。
例如git cherry-pick master~4 master~3
答案 1 :(得分:2)
你可能想知道为什么有人想这样做。让我们说这是你的生产分支,总是应该处于工作状态。让我们更早地说,当提交历史看起来像
1--2 ^ HEAD
你有一个实现,并认为提交2可能会破坏一切,所以你很快就推出了一个恢复提交,其中提交3恢复提交2.然后有人使提交4包含你想要保留的好内容。此时您意识到提交2实际上是正常的,因此您希望在4之上重播它。
然后你想恢复提交3(恢复提交2),因此恢复提交2:
git revert 3
答案 2 :(得分:0)
您想要的是还原提交3和4中引入的更改?如果是这样,请尝试:
$ git diff commit2..commit4 | git apply -R
仅当您要还原的提交之间的历史记录是线性的时,此方法才有效。