我有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
吗?有可能我失去了什么吗?请注意,所有分支都被推送到远程。
答案 0 :(得分:0)
--onto
选项就是你要找的。 p>
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
希望有所帮助