在一个变基后合并来自相似分支的选定文件

Merging selected files from similar branches after one was rebased

当我在 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

我该怎么做?我试过 checkoutfeature1 中的 c 中的新文件,但当然这会在不保留其历史记录的情况下提供文件。

@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

在分行:feature1 在 A:

签出

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

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