Tengo dos ramas (A y B) y quiero fusionar un solo archivo de la rama A con un archivo único correspondiente de la Rama B.
git
merge
git-branch
Isuru
fuente
fuente
git diff branch_name > patch
git apply patch
. stackoverflow.com/a/9473543/1091853Respuestas:
Me encontré con el mismo problema. Para ser precisos, tengo dos ramas
A
yB
con los mismos archivos pero una interfaz de programación diferente en algunos archivos. Ahora los métodos de archivof
, que es independiente de las diferencias de interfaz en las dos ramas, se cambiaron en ramaB
, pero el cambio es importante para ambas ramas. Por lo tanto, necesito fusionar solo el archivof
de ramaB
en el archivof
de ramaA
.Un simple comando ya resolvió el problema para mí si supongo que todos los cambios se confirman en ambas ramas
A
yB
:El primer comando cambia a rama
A
, donde quiero fusionarB
la versión del archivof
. El segundo comando parchea el archivof
conf
deHEAD
ofB
. Incluso puede aceptar / descartar partes individuales del parche. En lugar deB
que pueda especificar cualquier confirmación aquí, no tiene que ser asíHEAD
.Comunidad de edición : Si el archivo
f
enB
no existe enA
todavía, entonces omitir la--patch
opción. De lo contrario, obtendrá un "Sin cambio". mensaje.fuente
git checkout --patch B -- f
para que esto funcionara.a
durante la fase interactiva, en lugar de presionary
cada vez. O use elgit checkout B -- f
comando en su lugar.Esto es lo que hago en estas situaciones. Es un error pero funciona bien para mí.
Traté de parchar y mi situación era demasiado fea para eso. En resumen, se vería así:
Rama de trabajo: A Rama experimental: B (contiene file.txt que tiene los cambios que quiero plegar).
Crear una nueva sucursal basada en A:
Fusionar B en tempAB
Copie el hash sha1 de la fusión:
Verifique su rama de trabajo:
Revise su archivo arreglado:
Y ahí deberías tenerlo. Compromete tu resultado.
fuente
A
ha desviado desde elB
principio, de otras maneras. Copiar sobrepasará esas diferencias.Esto usa el difftool interno de git. Tal vez un poco de trabajo por hacer, pero sencillo.
fuente
--
(etiqueta de argumento vacía), git checkout docs: ARGUMENT DISAMBIGUATION dice: " úsalogit checkout -- <pathspec>
si quieres retirar estas rutas del índice". Esto se debe a que podría tener tanto una rama como un archivo / ruta con el mismo nombre. En tales casos, en lugar de pedirle que desambigüe si la rama o la ruta deben desprotegerse cuando existan, git optará por pagar la rama de forma predeterminada. Sin embargo, si--
precede a git, el archivo / ruta se descargará en su lugar.Este enfoque me pareció simple y útil: cómo "fusionar" archivos específicos de otra rama
Por favor lea el artículo completo para más comprensión
fuente
-p
opción en ese comando. Lo cual, luego, sobrescribe cualquier parte de su archivo de árbol de trabajo que se haya desviado previamente de la rama desde la que desprotegió, antes de los cambios del parche, desafortunadamente.Podrías usar:
Consejo: https://www.kernel.org/pub/software/scm/git/docs/git-merge-file.html
fuente
git merge-file
El siguiente comando (1) comparará el archivo de la rama correcta, a master (2) le preguntará interactivamente qué modificaciones aplicar.
git checkout - parche maestro
fuente
Mi edición fue rechazada, así que adjunto aquí cómo manejar los cambios de fusión desde una rama remota.
Si tiene que hacer esto después de una fusión incorrecta, puede hacer algo como esto:
fuente
Suponiendo que B es la rama actual:
Tenga en cuenta que esto solo aplica cambios al archivo local. Tendrás que comprometerte después.
fuente
error: <file-path>: already exists in working directory
git diff Branch_A <file-path, filename> -- hash_commit > file_name.temp
Puede verificar la versión anterior del archivo para fusionarlo, guardarlo con un nombre diferente y luego ejecutar la herramienta de fusión que esté en los dos archivos.
p.ej.
git show B:src/common/store.ts > /tmp/store.ts
(donde B es el nombre de la sucursal / commit / tag)meld src/common/store.ts /tmp/store.ts
fuente
Lo haré como
git format-patch branch_old..branch_new file
Esto producirá un parche para el archivo.
Aplicar parche en el destino branch_old
git am blahblah.patch
fuente