当我在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: 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
我该怎么做?我试过在a的
checkout
中从c
创建新文件,但这当然会在不保留其历史记录的情况下提供这些文件。 最佳答案
在分支机构时:feature1
在以下位置签出:
执行git cherry-pick feature1+: A .. X
操作将生成所需的树
master: o---o---o---o---o
\
feature1: o---o'---O---A---c---c---X