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

时间:2013-07-10 16:12:37

标签: git

我只需要发布已通过QA的某些故事。我无法访问分支机构,只能访问主分支机构。

两周后会有另一个版本,所以我想创建一个'死胡同'版本分支,我需要在最后一个版本之前从提交开始这个分支然后合并,rebase或者樱花挑选从主人那里提交到我的'释放分支'。

所以我在2周前从那时开始检查并从中做了一个分支。现在我需要折叠我感兴趣的所有东西。实际上,不,我没有。我不认为我有。在主人,我检查了旧的提交,然后建立了一个新的分支,但在gitk看着难以辨认的历史是吗? (我在Windows上)我认为它是从主人那里做出的一个分支。

感激地收到任何建议。请慢慢说,因为我发现Git比我生活中曾经不得不理解的任何其他主题更困难,包括衍生品定价,牛顿力学,矢量数学,弦理论和我的妻子,以及Git问题得到的投票判断,其他人也一样。

希望这是非常标准的,考虑到大多数团队都会有一些不符合QA的故事。

2 个答案:

答案 0 :(得分:7)

如果您的master分支目前看起来像这样:

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

并且,假设您要创建一个仅包含CE的新分支,以及直到(包括)A的所有内容,这里是基本的计划你需要这样做:

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

这应该导致这种情况:

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

根据原始A..Fmaster之间的确切依赖关系,您可能会遇到一些必须解决的冲突(例如,如果B引入了某些内容,并且C修改了某些内容,然后挑选C将找不到要修改的内容。

答案 1 :(得分:3)

另一个选择(挑选樱桃)是执行交互式变基。

仍然假设您的master分支目前看起来像这样:

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

您需要一个包含CE的新分支:

git checkout -b newBranch F
git rebase -i A

您最喜欢的编辑器会提示并显示newBranchA之间的所有提交(不包括在内):

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即可继续。