在重新定位后,合并来自类似分支的选定文件

时间:2016-01-04 02:01:24

标签: git merge rebase

当我在feature1工作时,在下面的提交点A,我被要求在其上构建另一个mod。我们称之为feature1+。这意味着图表如下所示:

master: o---o---o---o---o
             \
feature1:     o---e---e---e---O---A
                                   \
feature1+:                          o---c---c---X

现在我想将feature1+合并回feature1,但我意识到XA中存在的文件之间的变化很小; c提交中有两个新的跟踪文件。

在此过程中,我开始在feature1上整合提交,将e提交重新定义为单个o',以减少最终提交给master的提交数量。我相信有效的图表是这样的:

master: o---o---o---o---o
             \
feature1:     o---o'---O---A
               \     
feature1+:      o---e---e---e---O---A---c---c---X

但是,这意味着当我运行时,feature1+会将e提交转储到feature1

git checkout feature1
git merge feature1+

这给了我:

master: o---o---o---o---o
             \
feature1:     o---o'---O---A---e---e---e---O---c---c---X

我想在不重新引入c提交的情况下添加e次提交。换句话说,将其合并为:

master: o---o---o---o---o
             \
feature1:     o---o'---O---A---c---c---X

我怎么能这样做?我在checkout位于A时尝试c来自feature1的新文件,但当然这会在不保留历史记录的情况下提供文件。

2 个答案:

答案 0 :(得分:3)

在分支上:feature1在A:

签出

执行git cherry-pick feature1+: A .. X应该会产生所需的树

master: o---o---o---o---o
             \
feature1:     o---o'---O---A---c---c---X

答案 1 :(得分:0)

@nevyn在Freenode IRC的#git频道上建议的最短答案是cherry-pick feature1所需的提交(文档提示这个,但我可能只是害怕尝试) :

git checkout feature1
git cherry-pick c # the first c
git cherry-pick c # OK, the second one, I didn't think ahead THAT far.
git branch -d feature1+ # warns + gives the correct command for an unmerged branch