Git重组多个分支

时间:2017-02-14 22:11:04

标签: git

我有3个分支:主分支A,分支B,在某个点从A分支,分支C从B分支。 在每个分支上都有新的提交,分支B需要从A作为基础的代码,分支C需要在B的顶部。 这是我目前的情况:

sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files 

这就是我想要实现的目标:

 | | |
 | | /
 | | C
 |/B
 |
 A

首先我做了:

    |
    /
   | C
   | 
   |
  /B
 |
 |
 |
 |
 A

所以分支C在B之上。

然后我为分支A做了同样的事情:

B: git pull --rebase origin B
git checkout C
git rebase B

然后我切换到分支C,我注意到我没有A的变化(我认为如果C在B的顶部,而B在A的顶部,则意味着C从A有变化),或者也许我应该以相反的顺序完成它。

现在我已经分支了分支B(可能应该强制推送到远程)。

我可以在C分支上再次A: git pull --rebase origin A git checkout B git rebase A 吗?有可能我失去了什么吗?请注意,所有分支都被推送到远程。

2 个答案:

答案 0 :(得分:0)

--onto选项就是你要找的。

git checkout b
git rebase --onto a b^
git checkout c
git rebase --onto b c^

答案 1 :(得分:0)

你应该首先重新定位B然后再开始C.应该做的是:

# STEP 1
A: git pull --rebase origin A
git checkout B
git rebase A

# STEP 2
B: git pull --rebase origin B
git checkout C
git rebase B

如果你考虑一下,这很明显。

现在要解决这个问题,我们知道A很好,B也很好。只有C需要向上移动。

git checkout C
git rebase --onto B A C

希望有所帮助