У меня была аналогичная проблема, и я решил ее, переместив свою работу в соответствие с организацией целевого файла.
Скажем, вы изменили original.txtсвою ветку ( localветку), но original.txt, скажем, основная ветка была скопирована в другую copy.txt. Эта копия была сделана в коммите, который мы называем коммитом CP.
Вы хотите применить к новому файлу все ваши локальные изменения, коммиты Aи Bниже, которые были сделаны .original.txtcopy.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.
Надеюсь, это понятно. Этот ответ приходит с опозданием, но может быть полезен кому-то другому.