Tuve un problema similar y lo resolví modificando mi trabajo para que coincida con la organización del archivo de destino.
Digamos que modificó original.txt
en su rama (la local
rama), pero en la rama maestra, original.txt
se ha copiado a otra, por ejemplo copy.txt
. Esta copia se ha realizado en un commit que llamamos commit CP
.
Desea aplicar todos los cambios locales, confirmaciones A
y a B
continuación, que se realizaron en original.txt
el nuevo archivo copy.txt
.
---- X -----CP------ (master)
\
\--A---B--- (local)
Cree una rama desechable move
en el punto de partida de sus cambios con git branch move X
. Es decir, ponga la move
rama en commit X
, la anterior a las commits que desea fusionar; Lo más probable es que este sea el compromiso desde el que se ramificó para implementar sus cambios. Como el usuario @digory doo escribió a continuación, puede hacer git merge-base master local
para encontrar X
.
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
En esta rama, emita el siguiente comando de cambio de nombre:
git mv original.txt copy.txt
Esto cambia el nombre del archivo. Tenga en cuenta que copy.txt
todavía no existía en su árbol en este momento.
Compromete tu cambio (llamamos a este compromiso MV
).
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
Ahora puede cambiar su trabajo por encima de move
:
git rebase move local
Esto debería funcionar sin problemas y sus cambios se aplicarán copy.txt
en su sucursal local.
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
Ahora, no necesariamente desea o necesita comprometerse MV
en el historial de su sucursal principal, porque la operación de mover puede generar un conflicto con la operación de copia al confirmar CP
en la sucursal principal.
Solo tiene que volver a basar su trabajo nuevamente, descartando la operación de movimiento, de la siguiente manera:
git rebase move local --onto CP
... dónde CP
está el commit donde copy.txt
se introdujo en la otra rama. Esto reajusta todos los cambios copy.txt
en la parte superior de la CP
confirmación. Ahora, su local
rama es exactamente como si siempre la modificara copy.txt
y no original.txt
, y puede continuar fusionándose con otros.
/--A''---B''-- (local)
/
-----X-------CP----- (master)
Es importante que los cambios se apliquen CP
o de lo contrario copy.txt
no existirían y los cambios se volverían a aplicar original.txt
.
Espero que esto esté claro. Esta respuesta llega tarde, pero puede ser útil para otra persona.
--rename-threshold
opción para ajustar la cantidad de similitud que se requiere.