如何在合并后“平放”git历史记录

时间:2015-12-03 05:31:12

标签: git version-control merge git-rebase

首先,我很抱歉这个头衔。我不知道在没有样本的情况下描述这个问题。

1。这是我的问题:

我有这样的历史:

C1-->C2-->C3-->C4-->C8  --> develop
     |         |
     C5-->C6-->C7      --> feature (this branch was deleted after merge)

这种历史难以控制。

我知道此历史记录的出现是因为我首先将feature合并到develop而没有git rebase

但是,无论如何都要将上述历史重新写入这样的新历史:

  

C1 - > C2 - > C3 - > C4 - >的 C5 - > C6 - > C7 - > C8

2。这是我解决问题的方法:

[创意]: 有4组提交:

  • (C5,C6,C7)来自feature分支
  • 来自develop分支的
  • (C2,C3)
  • (C4)是合并提交
  • (C8)是合并后的新提交

因此,将所有提交组拆分为新分支=>然后再与git rebase合并。

第1步: 将所有提交C5,C6,C7拆分为新分支(稍后将其合并)

git checkout develop
git checkout C7
git checkout -b staging1

staging1

的历史
  

C1-> C2-> C5-> C6-> C7 - > staging1

第2步: rebase develop分支以删除合并功能。

git checkout develop
git rebase HEAD~2

develop的历史变成了

  

C1-> C2-> C3' - > C8' - >开发

第3步: 将提交C8'拆分为新分支

git checkout develop
git checkout -b staging2

第4步: develop分支重置为C3'

git checkout develop
git reset --hard C3'

develop的历史变成了

  

C1-> C2-> C3' - >开发

第5步staging1合并到develop

Rebase first

git checkout staging1
git rebase develop staging1

然后合并

git checkout develop
git merge --no-ff staging1

develop的历史变为:

  

C1 - > C2 - > C3 ' - >的 C5' - > C6 ' - > C7'

第6步staging2合并到develop 重新登陆     git checkout staging2     git rebase develop staging2

然后合并     git checkout开发     git merge --no-ff staging2 develop的历史变为:

  

C1 - > C2 - > C3 ' - >的 C5' - > C6 ' - > C7' - > C8 ''

但是C4(合并提交)丢失了。 (我需要花更多的精力再次合并)。 我的方法看起来很复杂,很容易出错。

所以,我的问题是:

是否有更好的方法来“平衡”我的历史

1 个答案:

答案 0 :(得分:0)

怎么样:

git checkout C8
git rebase HEAD~4

git rebase -i HEAD~4

如果要重新排序提交。