从 master 上的各种选定的提交构建一个新分支

问题描述 投票:0回答:2

我只需要发布某些已通过质量检查的故事。我无权访问分支,只能访问主分支。

两周后将会有另一个版本,所以我想创建一个“死胡同”版本分支,并且我需要从上一个版本之前的提交开始这个分支,然后合并、变基或樱桃选择来自主控的提交放入我的“发布分支”。

所以我两周前就从这一点出发并创建了一个分支。现在我需要折叠所有我感兴趣的东西。实际上,不,我没有。我想我没有。在 master 上,我检查了旧的提交,然后创建了一个新分支,但是查看 gitk 中难以辨认的历史记录是吗? (我在 Windows 上)我认为它是从 master 的头上分支出来的。

git
2个回答
7
投票

如果您的

master
分支当前如下所示:

A---B---C---D---E---F <--master

并且,假设您想创建一个仅包含

C
E
以及直到(包括)
A
之前的所有内容的新分支,以下是您需要执行的基本计划:

git checkout -b newbranch A
git cherry-pick C E

这应该会导致这种情况:

 A---B---C---D---E---F <--master
  \
   C'---E' <--newbranch

根据原始

A..F
master
之间的确切依赖关系,您可能会遇到一些必须解决的冲突(例如,如果
B
引入了某些内容,并且
C
修改了该内容,然后进行挑选
 C
不会找到它想要修改的东西)。


3
投票

另一个选项(除了挑选)是执行交互式变基。

仍然假设您的

master
分支当前看起来像这样:

A---B---C---D---E---F <--master

并且您想要一个带有

C
E
的新分支:

git checkout -b newBranch F
git rebase -i A

您最喜欢的编辑器将提示并显示

newBranch
A
之间的所有提交(不包括):

pick B    Message for commit B
pick C    Message for commit C
pick D    Message for commit D
pick E    Message for commit E
pick F    Message for commit F

删除不想保留的提交对应的行,即:B、D、F。保存并退出,让 rebase 命令完成其工作。瞧!

A---B---C---D---E---F <--master
  \
   C'---E' <--newbranch

正如 twalberg 所注意到的,在这个过程中你可能会遇到冲突。在这种情况下,rebase 命令将针对每个问题暂停,并邀请您解决它。完成后,只需输入

git rebase --continue
即可继续。

© www.soinside.com 2019 - 2024. All rights reserved.