假设我有一个主人和一个开发分支 - 开发有很多提交,主人不是为了简单起见:
Develop:
Commit 1
Commit 2
Commit 3
Commit 4
Commit 5
Commit 6
我想从master中删除一个没有任何这些提交的新功能分支。
但棘手的部分是我想从commit 3开始将开发合并到我的功能中。
我可以挑选,但实际上有比我简单的例子更多,更多的提交。
如何做到这一点?
答案 0 :(得分:2)
你可以挑选:
git checkout -b newfeature master
git cherry-pick commit2..develop
如果不直接支持该语法,请使用:
git cherry-pick $(git rev-list commit2..develop)
注意: a..b
范围表示法中的第一次提交未包含在修订列表中,谢谢Carl
否则,它看起来像是rebase --root ... --onto
的情况。我总是在手册页中查找具体内容。
答案 1 :(得分:0)
如果提交3-6不依赖于提交1-2,则可以克隆分支,然后使用交互式基础将开发分支拆分为两个分支,以便历史记录如下:
develop1:master commit1 commit2 develop2:master commit3 commit4 commit5 commit6
然后,您可以使用merge合并两个不同的分支。否则,你将不得不使用樱桃采摘,正如另一个答案所说。这将有效,但你将失去分支关系的历史。
一般来说,为您正在处理的每个特定主题创建一个新分支是有意义的,更多的是在细粒度方面。本地分支机构很便宜,甚至远程分支也不差。如果你把事情放在不同的分支上,那么组织你的思路要容易得多。它还鼓励您以尽可能将问题分成独立模块化部分的方式工作,从而鼓励更好的系统设计,提高可测试性等。