rebase分支以使用合并提交压缩历史记录

时间:2014-12-08 08:47:23

标签: git merge rebase

我的分支机构有以下情况: enter image description here

正如你所看到的,另一个分支(绿色)是在前一段时间从我们的主分支(红色)创建的,有些提交已添加,然后合并回我们的主分支,它没有收到任何提交的意思时间。从那以后,红色分支中增加了一些提交,所以我们的头实际上比左边稍远一些。

我如何将这个分支重新定位到自己(第一个提交到右边)来压缩它的提交历史,包括从绿色分支到红色分支的所有提交(所以我实际上只有单个分店左)?

修改 我设法通过软件将HEAD重置为e来解决它,然后压缩所有内容,然后将分支软重置为a,将b,c和d提交到a然后应用我的存储内容。快速和工作就像一个魅力!

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

根据提交d

签出新分支
git checkout -b RB d

                      main
                      |
                      V
a----------------e----f
 \              /
  b------c-----d
               ^
               |
               RB

重新定位main分支

git rebase main

                      main
                      |
                      V
a----------------e----f
 \              /
  b------c-----d----e'-----f'
                           ^
                           |
                           RB

切换回主分支并将其重置为重新分支

git checkout main
git reset --hard RB

                           main
                           |
                           |
a----------------e----f    |
 \              /          V
  b------c-----d----e'-----f'
                           ^
                           |
                           RB

git gc有一天会清除提交ef,因为它们不再被引用。

所以有一天你的存储库看起来像这样

                         main
                           |
                           V
 a---b----c----d----e'-----f'
                           ^
                           |
                           RB

只要git gc没有删除ef,您就可以使用其提交ID来恢复它们。

git checkout -b restored_main f

答案 1 :(得分:-1)

使用命令尝试交互式变基:

git rebase -i Head~6

这将弹出最近6次提交的记事本。你不需要改变它只是保存和关闭。在rebase完成后,您的提交历史记录应该没问题。