如何将提交重放到已经包含提交的分支上?

时间:2015-05-29 23:36:05

标签: git git-branch git-commit

让我们说我们的提交历史似乎是

    1--2--3--4
             ^
            HEAD

其中4是最近的提交。

有没有办法将提交2(2和1之间的差异)的更改重播到提交4?

你可能想知道为什么有人想这样做。让我们说这是你的生产分支,总是应该处于工作状态。让我们更早地说,当提交历史看起来像

    1--2
       ^
      HEAD

你有一个实现,并认为提交2可能会破坏一切,所以你很快就推出了一个恢复提交,其中提交3恢复提交2.然后有人使提交4包含你想要保留的好内容。此时您意识到提交2实际上是正常的,因此您希望在4之上重播它。

3 个答案:

答案 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

仅当您要还原的提交之间的历史记录是线性的时,此方法才有效。