Git,撤消rebase上的合并提交

时间:2017-10-04 05:36:46

标签: git merge rebase

我的历史看起来有点跟随

  * (TOPIC) topic 3
  |
| * merge master onto topic
|/|
* | master 3
| * topic 2
* | master 2
| | 
| * topic 1
|/
* master 1
|

即。上游分支合并到主题一次。现在,我想以交互方式在同一个基础上重新绑定此主题分支,但撤消合并(合并提交本身以及合并引入的所有提交)。这怎么可能?

2 个答案:

答案 0 :(得分:3)

让我们为你的绘图中描述的提交使用有效的标识符:

  * topic3          (TOPIC) topic 3
  |
| * topic2merge     merge master onto topic
|/|
* | master3
| * topic2
* | master2
| | 
| * topic1
|/
* master1
|

如果要删除合并提交(make topic2merge master onto topic之后第一次提交的唯一父级),则需要运行以下git rebase命令:

git rebase --onto topic2 topic2merge topic3

如果当前分支已经topic3,您可以从上面的命令中省略topic3(如果它存在,git rebase首先对其进行检查,如果是不是当前的分支。)

完成此操作后,图形如下所示:

| * topic3      <-- (TOPIC) topic 3
| |
* | master3
| * topic2
* | master2
| | 
| * topic1
|/
* master1
|

topic2mergetopic3之间的提交仍然存在于存储库中,但它们不再可见。如果它们可以到达,它们仍然是可见的,如果存在指向它们的分支,则会发生这种情况。甚至是远程分支机构。

如果您已将topic3推送到远程仓库,则必须运行git push -f origin topic3(用您的遥控器的名称替换origin)并告知您的同事您已更改的事实历史。他们需要知道这一点;在他们的存储库topic3的历史记录中仍然有topic2merge,而您所做的更改代表了他们的存储库不会自动执行的替代历史记录行。他们必须使用git reset --hardgit rebasegit cherry-pick才能跟上。

答案 1 :(得分:2)

您可以使用命令

ERROR 2017-10-04 12:35:00,849 [main] org.mule.module.launcher.application.DefaultMuleApplication: null

这将采用git rebase -i --onto master1 master topic 但不在topic(主题1,主题2,主题3)中的所有非合并提交,并将其应用于master提交。< / p>