在一个变基后合并来自相似分支的选定文件
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
,但我意识到存在于 X
和 A
的文件之间的变化很小; 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
在 feature1
中的 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
当我在 feature1
上工作时,在下面的提交点 A
上,我被要求在其上构建另一个 mod。我们称它为 feature1+
。这意味着图表看起来像这样:
master: o---o---o---o---o
\
feature1: o---e---e---e---O---A
\
feature1+: o---c---c---X
现在我想将 feature1+
合并回 feature1
,但我意识到存在于 X
和 A
的文件之间的变化很小; 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
在 feature1
中的 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