Скажем, я работаю над функцией в ветке oldFeature. Я сделал commits A и B1 и отправил его для проверки кода. В B1 я изменил некоторые существующие файлы, но также добавил newfile.txt.
Тем временем я начал работать в ветке newFeature, разветвленной от oldFeature (HEAD == B1). Я добавил C, D, E.
Между тем, я получил результаты обзора кода и должен был изменить B1, изменив newfile.txt, а также изменив некоторые существующие файлы. После исправлений он стал B2.
Итак, чтобы проиллюстрировать это:
newFeature oldFeature
A A
B1 B2 [B1 with some fixes]
C
D
E
Теперь я нахожусь в newFeature, и я хочу rebase newFeature иметь B2 вместо B1. Когда я просто делаю rebase, у меня есть конфликт из-за того, что newfile.txt добавляется в обе части rebase.
Я хочу сохранить версию с oldFeature (B2).
Я не могу переместить B1 в HEAD, потому что от него зависят C, D, E.
Я знаю, что могу сделать следующее обходное решение:
-
git checkout --theirs -
git add - продолжить rebase
Тогда у меня будет такая ситуация:
newFeature oldFeature
A A
B2 B2
BX
C
D
E
где BX больше или меньше B2\B1 для файлов, существовавших в A.
Теперь я могу выполнить интерактивную перезагрузку и удалить BX.
Однако мой обход довольно запутан. Есть ли более простой способ сделать это? Говоря проще, я имею в виду, что у меня есть
newFeature oldFeature
A A
B2 B2
B2\B1
C
D
E
без конфликтов конфликтов, а затем я могу избавиться от этого B2\B1 commit или заменить их автоматически, чтобы получить
newFeature oldFeature
A A
B2 B2
C
D
E
Использование Git 1.8.0.