Después de hacer una fusión "simple" (una sin conflictos), git show
generalmente solo muestra algo como
commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date: Tue Feb 22 00:27:17 2011 +0100
Merge branch 'testing' into master
Esto se debe a que, para las fusiones, git show
utiliza el formato de diferencias combinado que omite los archivos que coinciden con cualquiera de las versiones principales.
¿Hay alguna manera de forzar a git a que muestre todas las diferencias en el modo diff combinado?
Hacer git show -m
mostrará las diferencias (usando las diferencias entre pares entre la nueva y todas las versiones principales, respectivamente), pero preferiría tener eso con las diferencias marcadas con +/- en las columnas respectivas, como en el modo combinado.
Respuestas:
No, no hay forma de hacer esto
git show
. Pero ciertamente sería bueno a veces, y probablemente sería relativamente fácil de implementar en el código fuente de git (después de todo, solo tiene que decirle que no recorte lo que cree que es una salida extraña), por lo que el parche para hacerlo probablemente sería aceptado por los mantenedores de git.Sin embargo, ten cuidado con lo que deseas; fusionar una sucursal con un cambio de una línea que se bifurcó hace tres meses todavía tendrá una gran diferencia frente a la línea principal, por lo que una diferencia tan completa sería casi completamente inútil. Es por eso que git no lo muestra.
fuente
Mira el mensaje de confirmación:
observe la línea:
tomar esos dos commit id y revertirlos. para obtener la diferencia que desea, debería hacer:
para mostrar solo los nombres de los archivos modificados:
y para extraerlos, puedes agregar esto a tu gitconfig:
luego úsalo haciendo:
fuente
git diff fc17405...ee2de56
: esto mostrará todos los cambios en ee2de56 a los que se puede acceder desde commits en fc17405, que creo que es lo que desea. Tenga en cuenta los 3 puntos en lugar de dos.git log
, que todavía muestra todos los commits, como la..
variante...
y...
hacer lo mismo paralog
, perodiff
porque son diferentes? ¿Cómo obtengo una lista de confirmaciones que se fusionaron en esta rama?Una mejor solución (mencionada por @KrisNuttycombe):
para la confirmación de fusión:
para mostrar todos los cambios a los
ee2de56
que se puede acceder desde commitsfc17405
. Tenga en cuenta el orden de los hashes de confirmación: es el mismo que se muestra en la información de combinación:Merge: fc17405 ee2de56
¡También tenga en cuenta los 3 puntos en
...
lugar de dos !Para obtener una lista de los archivos modificados, puede usar:
fuente
Puede crear una rama con HEAD establecida en una confirmación antes de fusionar. Entonces, puedes hacer:
Esto se fusionará, pero no se comprometerá. Luego:
fuente
Parece que se respondió aquí: https://public-inbox.org/git/[email protected]/
fuente
Creo que solo necesitas 'git show -c $ ref'. Probar esto en el repositorio de git en a8e4a59 muestra un diff combinado (caracteres más / menos en una de 2 columnas). Como menciona el manual de git-show, prácticamente delega a 'git diff-tree' para que esas opciones parezcan útiles.
fuente
git show -c $ref
muestra el mismo resultado que he citado, es decir, no hay diferencias.-c
selecciona un modo diff combinado muy similar al modo predeterminado para commits de fusión que es '--cc', vergit help show
ygit help diff-tree
. Ambos omiten por completo los archivos que están de acuerdo con cualquiera de las versiones principales de ese archivo.a8e4a59
de hecho, no entra en la categoría de commits de fusión, quiero decir. Esta confirmación de fusión de hecho contiene un archivo que difiere de sus dos versiones principales.Documentation/git-fast-import.txt
tiene algunas cosas agregadas de uno de los padres y otras del otro. Esto da como resultado una salida no vacía degit diff-tree --cc
. Sin embargo, solo se muestran los cambios en este caso "conflictivo". Todos los resultados de fusión "limpia", miragit show -m a8e4a59
, no se muestran en absoluto.git show -c
salida. (man git-diff-tree
dice "Además, enumera solo los archivos que fueron modificados de todos los padres", pero por mi parte, ciertamente no lo había visto.)en tu caso solo necesitas
o simplemente hash para que te comprometas:
fuente
git merge-base HEAD^ HEAD^2
y laHEAD^
yHEAD^2
en el mismo estilo que se realiza para los archivos que se fusionaron con los conflictos.Si su confirmación de fusión es commit 0e1329e5, como se indicó anteriormente, puede obtener la diferencia contenida en esta fusión mediante:
¡Espero que esto ayude!
fuente
Si está sentado en la confirmación de fusión, esto muestra las diferencias:
git diff HEAD~1..HEAD
Si no está en la confirmación de fusión, simplemente reemplace HEAD con la confirmación de fusión. Este método parece el más simple e intuitivo.
fuente
Puede usar el comando diff-tree con la bandera -c. Este comando le muestra qué archivos han cambiado en la confirmación de fusión.
Obtuve la descripción de la bandera -c de Git-Scm :
fuente
Desarrollé un enfoque de propósito general para realizar varias operaciones en los commits de una fusión.
Paso uno : Agregue un alias a git editando
~/.gitconfig
:Paso dos : En
~/.githelpers
, defina una función bash:Paso tres : ¡Ganancia!
Probablemente haya MUCHO margen de mejora aquí, simplemente lo combiné para superar una situación molesta. Siéntase libre de burlarse de mi sintaxis y / o lógica bash.
fuente