Для общего набора файлов, действительно общих для двух ветвей, одним решением действительно является rebase (до слияния), но это предполагает:
- , который вы еще не выдвинуливаша ветвь к удаленному репо (потому что вы собираетесь изменить историю)
- у вас есть все модификации общего набора файлов, локализованные в некоторых коммитах (другими словами, коммит не содержат как специфичные для темы , так и некоторые общие модификации)
Если ваши коммиты хорошо определены как "общие" или "тематические", то вы можете изменить их порядок,делая те, у кого общий код, самые последние коммиты в вашей ветке.
Оттуда легко:
- перебазировать эти коммиты в «общую» ветку
- объединить эту ветку в вашей текущей ветке темы (чтобы вернуть все эти изменения)
- объединить ту же самую «общую» ветку с другой веткой «theme2» (чтобы она имела ту же общуюэволюции)
См. git: как объединить ветки, сохранив некоторые наборы изменений исключительно для одной ветви?
t1a--t1b--ca--cb--t1c # topic1 with some common commits in it 'ca' and cb'
t2a--t2b # second topic branch
rebase --interactive
в topic1
ветви:
t1a--t1b--t1c'--ca'--cb' # topic1 with some common commits in most recent position
t2a--t2b # second topic branch
rebase --onto
(или просто сбросьте HEAD
из topic1
и checkout -b common
, если ветвь common
еще не существует), как показано в " объединении ветвей при сохранениинекоторые наборы изменений, исключающие одну ветку?"
t1a--t1b--t1c' # topic1 without any common code
ca''--cb'' # common branch
t2a--t2b # second topic branch
Объединить общие изменения в обеих ветках темы:
t1a--t1b--t1c'--c1 # topic1 with a commit with common code evolutions
ca''--cb'' # common branch
t2a--t2b--c1' # second topic branch with same common code evolutions