我只需要发布已通过QA的某些故事。我无法访问分支机构,只能访问主分支机构。
两周后会有另一个版本,所以我想创建一个'死胡同'版本分支,我需要在最后一个版本之前从提交开始这个分支然后合并,rebase或者樱花挑选从主人那里提交到我的'释放分支'。
所以我在2周前从那时开始检查并从中做了一个分支。现在我需要折叠我感兴趣的所有东西。实际上,不,我没有。我不认为我有。在主人,我检查了旧的提交,然后建立了一个新的分支,但在gitk看着难以辨认的历史是吗? (我在Windows上)我认为它是从主人那里做出的一个分支。
感激地收到任何建议。请慢慢说,因为我发现Git比我生活中曾经不得不理解的任何其他主题更困难,包括衍生品定价,牛顿力学,矢量数学,弦理论和我的妻子,以及Git问题得到的投票判断,其他人也一样。
希望这是非常标准的,考虑到大多数团队都会有一些不符合QA的故事。
答案 0 :(得分: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
将找不到要修改的内容。
答案 1 :(得分: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
即可继续。