Git - 从特定提交开始合并

3
假设我有一个主分支和一个开发分支 - 为了简化,开发分支有许多主分支没有的提交:
Develop:

Commit 1
Commit 2
Commit 3
Commit 4
Commit 5
Commit 6

我想从主分支上创建一个新的功能分支,该分支不包含develop中的任何这些提交。
但棘手的部分是我想从第3个提交开始将develop合并到我的功能分支中。
我可以使用cherry-pick,但实际上有比我的简单示例更多的提交。
如何完成这个操作?
2个回答

3
你可以选择性地挑选:
git checkout -b newfeature master
git cherry-pick commit2..develop

如果该语法没有直接支持,请使用以下方法:
git cherry-pick $(git rev-list commit2..develop)
注意:a..b范围符号中,第一个提交不包含在修订列表中,谢谢Carl的提示。

否则,看起来需要使用rebase --root ... --onto。我总是在手册页上查找具体信息。


0
如果提交3-6不依赖于提交1-2,则可以克隆该分支,然后使用交互式变基将develop分支拆分为两个分支,使历史记录如下:
develop1:master commit1 commit2 develop2:master commit3 commit4 commit5 commit6
然后您可以使用合并将两个不同的分支合并。否则,您将不得不像其他答案所说的那样使用cherry-picking。这将起作用,但您将失去分支关系的历史记录。
通常,为您正在处理的每个特定主题创建一个新分支是有意义的,更加细粒度。本地分支很便宜,即使远程分支也不那么糟糕。如果将事物保持在单独的分支上,组织思路会更容易。它还鼓励您以尽可能将问题划分为独立模块化部分的方式工作,这有助于改进系统设计,提高可测试性等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接