2016-08-02 46 views
1

我有以下结构:git的变基已经重建基础分支

F2:      [F21] - [F22] - [F23] 
         /
F:  [F1] - [F2] - [F3] - [F4] - [F5] 
     /
M: [M1] 

而且,我也壁球(重订)的提交在F分支,导致以下:

F2: [F1] - [F2] - [F3] - [F21] - [F22] - [F23] 
    /
M: [M1] 
     \ 
F:  [F'] 

和合并的掌握:现在

F2: [F1] - [F2] - [F3] - [F21] - [F22] - [F23] 
    /
M: [M1] - [M2] 
     \ /
     [F'] 

,我想基本上变基F2F,但这需要我解决路径上的冲突,主要是F1,F2,F3F'。我期望的结果是:

F2: [F`] - [F21] - [F22] - [F23] 
    /
M: [M1] - [M2] 
     \ /
     [F'] 

是否有可能以某种方式暗示变基,改变它看到被提交我的一部分,所以我不需要解决这些问题?

+0

这就是你压扁提交时得到的结果。老实说,不要这样做。当你需要修复你的下一个回归,并且能够使用'git bisect'达到良好效果时,你会很高兴你没有。 – cmaster

+0

既然它不是你的问题的答案,我会留下它作为评论:我相信你的最后一张图像想要显示箭头从M1到F2时间轴,对不对?对不起,你似乎想在'F2'历史中挤压'F1 ... F3'。我担心你运气不好 - 你不能“暗示”任何东西,因为你压扁了那些'F'提交,而且我再也没有看到用来压缩'F1 ... F3'的用法。 Sqashing是真正让你失去信息的少数几件事之一,所以...运气不好。它可以用来在推送之前清理不需要的功能分支,但这不是你在这里所拥有的。 – AnoE

回答

1

最简单的方法是告诉rebase用--interactive标志跳过那些提交。在F2,这样做:

git rebase --interactive [F'] 

你会看到什么Git是准备做:

pick c411f13 F1 // <- delete this line or use drop instead of pick 
pick 8f9b902 F2 // <- delete this line or use drop instead of pick 
pick 7693586 F3 // <- delete this line or use drop instead of pick 
pick 1fd0615 F21 
pick 26fd795 F22 
pick 2fb0408 F23 

请参见下面这些线路的详细信息的评论,# d, drop = remove commit# If you remove a line here THAT COMMIT WILL BE LOST是有趣的在这里。

保存并退出,git会做你所问:跳过第一个提交并应用其他。