У мене була подібна проблема, і я вирішив її, передавши свою роботу, щоб відповідати цільовій організації файлів.
Скажіть, що ви змінили original.txtна своїй гілці ( localгілці), але на головній гілці, original.txtскопійовано в іншу, скажімо copy.txt. Ця копія була зроблена в комітеті, який ми називаємо фіксувати CP.
Ви хочете застосувати всі ваші локальні зміни, комісії Aта Bнижче, які були внесені original.txtдо нового файлу copy.txt.
---- X -----CP------ (master)
\
\--A---B--- (local)
Створіть гілку, що викидається, moveна початковій точці змін git branch move X. Тобто, покладіть moveгілку на фіксацію X, ту, до якої потрібно здійснити об'єднання; швидше за все, це зобов’язання, від якого ви розлучилися, щоб здійснити свої зміни. Як написав користувач @digory doo нижче, ви можете зробити, git merge-base master localщоб знайти X.
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
У цій гілці видайте таку команду перейменування:
git mv original.txt copy.txt
Це перейменує файл. Зауважте, що copy.txtв вашому дереві ще не існувало.
Зробіть свої зміни (ми називаємо це зобов’язання MV).
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
Тепер ви можете відновити роботу поверх move:
git rebase move local
Це має працювати без проблем, і ваші зміни будуть застосовані до copy.txtвашого місцевого відділення.
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
Тепер вам не обов’язково потрібно або потрібно брати на себе зобов’язання MVв історії вашої основної гілки, тому що операція переміщення може призвести до конфлікту з операцією копіювання при фіксації CPв основній гілці.
Вам залишається лише знову відновити роботу, відкинувши операцію переміщення, наступним чином:
git rebase move local --onto CP
... де CPкомітет, де copy.txtбуло введено в іншій галузі. Це відновлює всі зміни, що перебувають copy.txtна вершині комісії CP. Тепер ваша localфілія точно така, як ніби ви завжди змінювались, copy.txtа не original.txtви можете продовжувати об'єднання з іншими.
/--A''---B''-- (local)
/
-----X-------CP----- (master)
Важливо, щоб зміни застосовувались CPабо copy.txtне існували б інакше , а зміни будуть застосовані знову original.txt.
Сподіваюся, це зрозуміло. Ця відповідь приходить пізно, але це може бути корисним комусь іншому.