2017-10-16 166 views
2

我经常与一个系列分支最终建成一个从另一个这样的:调整基线一个系列分支为平行分行

...-(M) 
    | 
    +-A 
     | 
     +-B 
     | 
     +-C 
为每个A,B和C.

的拉请求

一般

问题是,如果我向C请求一个Pull请求,它将包含在分支A和B中所做的所有更改,这些更改只会激怒人们。

我想重新构造图,使得它看起来像:

...-(M) 
    | 
    +-A 
    | 
    +-B 
    | 
    +-C 

但每次我试图变基或者“B”或“C”到“(M)”的结构保持一样。

什么是重构这个的正确方法?

顺便说一下,我使用SourceTree来处理所有与Git相关的需求,但如果需要,我很乐意从控制台指令进行翻译。

编辑:VonC建议的解决方案确实有效,但当我使用SourceTree的Git内置版本时,它不适用于我。从这里下载便携版本后:https://github.com/git-for-windows/git/releases/tag/v2.14.2.windows.3它工作正常。

回答

1

不涉及所有以前的提交是rebase --onto命令。

git checkout C 
git rebase --onto M B C 

这意味着:变基 B之后一切(B除外)直至C(C包括)到M.

git checkout B 
git rebase --onto M A B 

注:对于时,最好使用的git bashlatest Git for Windows(如PortableGit-2.14.2.3-64-bit.7z.exe解压到任何你想要的地方)。这样可以避免像“当前分支没有跟踪信息,请指定你想要分支的分支”这样的怪异错误。那I mentionned here
A rebase是本地操作,不应该关注远程分支。

+0

谢谢你VonC。我一直在尝试非常类似于以下这篇文章:https://makandracards.com/makandra/10173-git-how-to-rebase-your-feature-branch-from-one-branch-to-other 但是,链接的示例(带有2个参数)和示例(带有3个参数)都会给出错误消息:“当前分支没有跟踪信息,请指定要对其分支的分支。”我正在努力理解这意味着什么。 – Slartibartfast

+0

@Slartibartfast奇怪的是,这应该涉及本地分支:不需要远程跟踪分支。但是,如果你必须:https://stackoverflow.com/a/32729663/6309 – VonC

+0

@Slartibartfast顺便说一句,你使用哪个Git版本,在哪个操作系统上? Git分支-v显示A,B和C吗? – VonC