Tengo 2 ramas git branch1 y branch2 y quiero fusionar file.py en branch2 en file.py en branch1 y solo ese archivo.
En esencia, solo quiero trabajar en file.py en branch1 pero quiero aprovechar el comando merge. ¿Cuál es la mejor manera de hacer esto?
Respuestas:
Cuando el contenido es de
file.py
desde BRANCH2 que ya no se aplica a BRANCH1 , se requiere recoger algunos cambios y dejando a los demás. Para un control total, haga una fusión interactiva con el--patch
interruptor:La sección de modo interactivo en la página de manual
git-add(1)
explica las teclas que se utilizarán:El comando dividir es particularmente útil.
fuente
git init <dir>
) y finalmente tirarlo (rm -r <dir>
).Aunque no es una fusión per se, a veces se necesita todo el contenido de otro archivo en otra rama. La publicación de blog de Jason Rudolph proporciona una manera simple de copiar archivos de una rama a otra. Aplique la técnica de la siguiente manera:
Ahora
file.py
está ahora en branch1 .fuente
file.py
con lo que sea que esté en la rama 2.Ninguna de las otras respuestas actuales "fusionará" los archivos, como si estuviera utilizando el comando de combinación. (En el mejor de los casos, requerirán que elija manualmente las diferencias). Si realmente desea aprovechar la fusión utilizando la información de un antepasado común, puede seguir un procedimiento basado en uno que se encuentra en la sección "Fusión avanzada" del git Manual de referencia.
Para este protocolo, supongo que desea fusionar el archivo 'ruta / a / archivo.txt' desde origen / maestro en CABEZA - modifique según corresponda. (No tiene que estar en el directorio superior de su repositorio, pero ayuda).
git merge-file debe usar todas las configuraciones de fusión predeterminadas para formatear y cosas por el estilo.
También tenga en cuenta que si su "nuestro" es la versión de copia de trabajo y no desea ser demasiado cauteloso, puede operar directamente en el archivo:
fuente
¿Son todas las modificaciones
file.py
enbranch2
sus propias confirmaciones, separada de las modificaciones a otros archivos? Si es así, simplemente puede hacercherry-pick
los cambios:De lo contrario,
merge
no funciona en rutas individuales ... también podría crear ungit diff
parche defile.py
cambiosbranch2
y degit apply
ellos abranch1
:fuente
Puedes
stash
ystash pop
el archivo:fuente
Para fusionar solo los cambios de branch2
file.py
, haga que los otros cambios desaparezcan.Merge nunca mirará ningún otro archivo. Es posible que necesite '-f' los pagos si los árboles son lo suficientemente diferentes.
Tenga en cuenta que esto dejará a branch1 como si todo en el historial de branch2 hasta ese momento se hubiera fusionado, lo que puede no ser lo que desea. Probablemente sea una mejor versión del primer pago anterior
en cuyo caso el mensaje de confirmación probablemente también debería ser
fuente
Estoy en la misma situación, quiero fusionar un archivo de una rama que tiene muchas confirmaciones en 2 ramas. Intenté muchas formas anteriores y otras que encontré en Internet y todas fallaron (porque el historial de confirmación es complejo), así que decido seguir mi camino (la forma loca).
fuente
Lo que he hecho es un poco manual, pero yo:
revert
;HEAD~1
, es decir, su estado en la confirmación de fusión;¿Feo? Si. ¿Fácil de recordar? También si.
fuente