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 > patchgit apply patch. stackoverflow.com/a/9473543/1091853Respuestas:
Me encontré con el mismo problema. Para ser precisos, tengo dos ramas
AyBcon 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 archivofde ramaBen el archivofde ramaA.Un simple comando ya resolvió el problema para mí si supongo que todos los cambios se confirman en ambas ramas
AyB:El primer comando cambia a rama
A, donde quiero fusionarBla versión del archivof. El segundo comando parchea el archivofconfdeHEADofB. Incluso puede aceptar / descartar partes individuales del parche. En lugar deBque pueda especificar cualquier confirmación aquí, no tiene que ser asíHEAD.Comunidad de edición : Si el archivo
fenBno existe enAtodavía, entonces omitir la--patchopción. De lo contrario, obtendrá un "Sin cambio". mensaje.fuente
git checkout --patch B -- fpara que esto funcionara.adurante la fase interactiva, en lugar de presionarycada vez. O use elgit checkout B -- fcomando 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
Aha desviado desde elBprincipio, 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
-popció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-fileEl 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 directorygit diff Branch_A <file-path, filename> -- hash_commit > file_name.tempPuede 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.tsfuente
Lo haré como
git format-patch branch_old..branch_new fileEsto producirá un parche para el archivo.
Aplicar parche en el destino branch_old
git am blahblah.patchfuente