Eu tive um problema semelhante e resolvi-o reorganizando meu trabalho para corresponder à organização do arquivo de destino.
Diga que você modificou original.txtem seu ramo (o localramo), mas no ramo mestre, original.txtfoi copiado para outro, digamos copy.txt. Esta cópia foi feita em um commit que chamamos de commit CP.
Você deseja aplicar todas as alterações locais, confirmações Ae Babaixo feitas no original.txtnovo arquivo copy.txt.
---- X -----CP------ (master)
\
\--A---B--- (local)
Crie um ramo descartável moveno ponto inicial de suas alterações com git branch move X. Ou seja, coloque o movebranch em commit X, aquele antes dos commit que você deseja mesclar; provavelmente, esse é o commit do qual você se ramificou para implementar suas alterações. Como o usuário @digory doo escreveu abaixo, você pode fazer o git merge-base master localpara encontrar X.
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
Nesta ramificação, emita o seguinte comando de renomeação:
git mv original.txt copy.txt
Isso renomeia o arquivo. Observe que copy.txtainda não existia na sua árvore neste momento.
Confirme sua alteração (chamamos de confirmação MV).
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
Agora você pode refazer o seu trabalho sobre move:
git rebase move local
Isso deve funcionar sem problemas, e suas alterações são aplicadas copy.txtna sua filial local.
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
Agora, você não necessariamente deseja ou precisa ter confirmação MVno histórico da ramificação principal, porque a operação de movimentação pode levar a um conflito com a operação de cópia em commit CPna ramificação principal.
Você só precisa refazer seu trabalho novamente, descartando a operação de movimentação, da seguinte maneira:
git rebase move local --onto CP
... onde CPestá o commit onde copy.txtfoi introduzido no outro ramo. Isso refaz todas as alterações na copy.txtparte superior da CPconfirmação. Agora, seu localramo é exatamente como se você sempre modificasse copy.txte não original.txt, e você pode continuar se fundindo com os outros.
/--A''---B''-- (local)
/
-----X-------CP----- (master)
É importante que as mudanças sejam aplicadas CPou copy.txtnão existiriam e as mudanças seriam aplicadas novamente original.txt.
Espero que isso esteja claro. Essa resposta chega tarde, mas pode ser útil para outra pessoa.