假设我有一个 master 和一个 develop 分支 - develop 有很多提交 master 并没有为简单起见:
Develop:
Commit 1
Commit 2
Commit 3
Commit 4
Commit 5
Commit 6
我想从 master 中删除一个新功能分支,该分支在开发中没有任何这些提交。
但棘手的部分是我想从提交 3 开始将开发合并到我的功能中。
我可以挑选,但实际上有比我的简单示例更多的提交。
如何才能做到这一点?
假设我有一个 master 和一个 develop 分支 - develop 有很多提交 master 并没有为简单起见:
Develop:
Commit 1
Commit 2
Commit 3
Commit 4
Commit 5
Commit 6
我想从 master 中删除一个新功能分支,该分支在开发中没有任何这些提交。
但棘手的部分是我想从提交 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
. 我总是在手册页中查找细节。
如果提交 3-6 不依赖于提交 1-2,您可以克隆分支,然后使用交互式变基将开发分支拆分为两个分支,这样历史记录如下所示:
开发1:主提交1 提交2 开发2:主提交3 提交4 提交5 提交6
然后您可以使用合并合并两个不同的分支。否则,您将不得不像其他答案所说的那样使用樱桃采摘。这会起作用,但您会丢失分支关系的历史记录。
一般而言,为您正在处理的每个特定主题创建一个新分支是有意义的,更加精细化。本地分支机构很便宜,即使是远程分支机构也不错。如果你把事情放在不同的分支上,那么组织你的思路要容易得多。它还鼓励您以一种尽可能将问题划分为独立的模块化部分的方式工作,从而鼓励更好的系统设计,提高可测试性等。