Скажем, я работаю над функцией в ветке 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.