2017-02-14 2 views
2

У меня есть 3 ветви: главная ветвь A, ветвь B, которая разветвлена ​​от A в какой-то момент, и ветвь C, которая разветвлена ​​от B. На каждой ветке есть новые коммиты, ветка B должна иметь код из а в качестве основания, ветви C должна быть на вершине B. Это моя текущая ситуация:Git rebasing несколько ветвей

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

Это то, что я пытаюсь достичь:

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

так первый я сделал:

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

так ветвь C находится на вершине B.

Тогда я сделал то же самое для ветви А:

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

Затем я перешел на ветку C, и я заметил, что у меня нет изменений по сравнению с A (я думал, что если C находится сверху B, а B находится сверху A, это означает, что C имеет изменения от A), или, может быть, я должен был сделать это в обратном порядке.

Теперь у меня есть расходящаяся ветвь B (возможно, нужно надавить на пульт).

Могу ли я git rebase B еще раз на ветке C? Есть ли возможность потерять что-то? Обратите внимание, что все ветви нажаты на удаленный.

ответ

0

--onto вариант - это то, что вы ищете.

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

Вы должны начали с помощью перебазирования B, а затем С. Что должен был сделать, это было следующее:

# 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 

Надежда, что помогает

Смежные вопросы