Ho riscontrato un problema simile e l'ho risolto riformulando il mio lavoro in modo che corrispondesse all'organizzazione del file di destinazione.
Supponiamo che tu abbia modificato original.txtil tuo ramo (il localramo), ma nel ramo principale original.txtsia stato copiato in un altro, diciamo copy.txt. Questa copia è stata eseguita in un commit che chiamiamo commit CP.
Si desidera applicare tutte le modifiche locali, le commit Ae le Bsuccessive, che sono state apportate original.txt, al nuovo file copy.txt.
---- X -----CP------ (master)
\
\--A---B--- (local)
Crea un ramo di lancio movenel punto iniziale delle modifiche con git branch move X. Vale a dire, metti il moveramo in commit X, quello prima dei commit che vuoi unire; molto probabilmente, questo è il commit da cui sei uscito per implementare le tue modifiche. Come l'utente @digory doo ha scritto di seguito, puoi farlo git merge-base master localper trovare X.
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
Su questo ramo, emettere il seguente comando di ridenominazione:
git mv original.txt copy.txt
Questo rinomina il file. Nota che copy.txtnon esisteva ancora nel tuo albero a questo punto.
Commetti la tua modifica (la chiamiamo commit MV).
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
Ora puoi modificare il lavoro su move:
git rebase move local
Questo dovrebbe funzionare senza problemi e le tue modifiche verranno applicate copy.txtnella tua filiale locale.
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
Ora, non è necessario o non è necessario eseguire il commit MVnella cronologia del ramo principale, poiché l'operazione di spostamento può portare a un conflitto con l'operazione di copia durante il commit CPnel ramo principale.
Devi solo rifare il lavoro di nuovo, scartando l'operazione di spostamento, come segue:
git rebase move local --onto CP
... dov'è CPil commit dove è copy.txtstato introdotto nell'altro ramo. Ciò ripristina tutte le modifiche copy.txtsopra il CPcommit. Ora, il tuo localramo è esattamente come se avessi sempre modificato copy.txte non original.txt, e puoi continuare a fonderti con gli altri.
/--A''---B''-- (local)
/
-----X-------CP----- (master)
È importante che le modifiche vengano applicate CPo copy.txtnon esistano e che le modifiche vengano applicate nuovamente original.txt.
Spero sia chiaro. Questa risposta arriva in ritardo, ma può essere utile a qualcun altro.