当我在 feature1
上工作时,在下面的提交点 A
上,我被要求在其上构建另一个 mod。我们称它为 feature1+
。这意味着图表看起来像这样:
master: o---o---o---o---o
\
feature1: o---e---e---e---O---A
\
feature1+: o---c---c---X
现在我想将 feature1+
merge 回 feature1
,但我意识到存在于 X
和 A< 的文件之间的变化
是最小的; c
提交中有两个新的跟踪文件。
在此过程中,我开始整合 feature1
上的提交,将 e
提交重新设置为单个 o'
以减少数量of 最后提交给 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
提交。换句话说,将其 merge 回:
master: o---o---o---o---o
\
feature1: o---o'---O---A---c---c---X
我该怎么做?当在 A 处的 feature1
中时,我尝试只checkout
来自 c
的新文件,但当然这会在不保留文件历史的情况下提供文件.
最佳答案
在分支上时:feature1
在 A checkout :
执行 git cherry-pick feature1+: A .. X
应该会产生所需的树
master: o---o---o---o---o
\
feature1: o---o'---O---A---c---c---X
关于git - 在一个 rebase 后 merge 来自相似分支的选定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583770/