git:在多个分支的共同祖先(包括)之前交换两个提交的顺序

时间:2015-08-03 03:19:55

标签: git

假设我在GIT上有以下分支结构:

A --- B --- C --- D --- E
            +---- F --- G
            +---- H --- I

三个分支,共同基础C

我想要做的是交换B和C的顺序,以产生以下结构:

A --- C --- B --- D --- E
            +---- F --- G
            +---- H --- I

我该怎么办?

1 个答案:

答案 0 :(得分:3)

从交互式rebase开始。

git checkout <branch-E>
git rebase -i <sha1-A>

重新排序B和C.这给了我们以下历史记录:

A --- C'--- B'--- D'--- E'
  \
   -- B --- C --- F --- G
              \
               -- H --- I

但是,我们不想为其他两个分支重复此操作。如果我们这样做,我们将为B和C创建新的提交,因为提交时间戳会有所不同。我们希望重用相同的提交。

我们可以使用更简单的rebase命令在其他两个分支中修复它:

git rebase --onto <sha1-B'> <sha1-C> <branch-G>
git rebase --onto <sha1-B'> <sha1-C> <branch-I>

这给了我们以下历史:

               -- D'--- E'
              /
A --- C'--- B'--- F'--- G'
              \
               -- H'--- I'