La razón principal de lo que puedo ver es la siguiente:
- La interfaz de usuario de GitHub para fusionar solicitudes de extracción actualmente (octubre de 2015) no le permite editar la primera línea del mensaje de confirmación, lo que obliga a que sea
Merge pull request #123 from joebloggs/fix-snafoo
- La interfaz de usuario de GitHub para explorar el historial de confirmaciones actualmente no le permite ver el historial de la rama desde el punto de vista
--first-parent
- La interfaz de usuario de GitHub para ver la culpa de un archivo actualmente no le permite ver la culpa del archivo con el punto de vista
--first-parent
(tenga en cuenta que esto solo se solucionó en Git 2.6.2, por lo que podríamos perdona a GitHub por no tenerlo disponible)
Entonces, cuando combinas las tres situaciones anteriores, obtienes una situación en la que las confusiones no ocultadas que se fusionan lucen feas desde la interfaz de usuario de GitHub.
Tu historial con confirmaciones aplastadas se verá algo así como
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... Hotfix for android display issue
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... Implemented pop-up to select language
Mientras que sin comillas aplastadas, el historial se verá algo así como
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... hotfix for #5849564648
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Cuando tienes muchas confirmaciones en un seguimiento de relaciones públicas en las que se produjo un cambio puede convertirse en una pesadilla si te limitas a usar la interfaz de usuario de GitHub .
Por ejemplo, encuentra un puntero nulo que no está referenciado en algún lugar de un archivo ... por lo que dice "¿quién hizo esto y cuándo? ¿Qué versiones de versiones están afectadas?". Luego pasas a la vista de culpa en la interfaz de usuario de GitHub y ves que la línea se cambió en 789fdfffdf
... "Oh, pero espera un segundo, esa línea solo tuvo su sangría cambiada para encajar con el resto del código ", por lo que ahora necesita navegar hasta el estado del árbol para ese archivo en la confirmación principal y volver a visitar la página de la culpa ... eventualmente encontrará la confirmación ... es una confirmación de hace 6 meses ..." oh **** Esto podría estar afectando a los usuarios durante 6 meses "dices ... ah, pero espera, ese compromiso estaba en realidad en una solicitud de extracción y solo se fusionó ayer y nadie ha cortado aún un lanzamiento ..." Maldita sea, gente por fusionar confirmaciones sin aplastar la historia "es el grito que generalmente se puede escuchar después de aproximadamente 2 o 3 expediciones de arqueología de códigos a través de la interfaz de usuario de GitHub
Ahora veamos cómo funciona esto si usas la línea de comandos Git (y 2.6.2 que tiene la solución para git blame --first-parent
)
- Si estuviera usando la línea de comandos de Git, podría controlar completamente el mensaje de confirmación de combinación y, por lo tanto, la confirmación de combinación podría tener una buena línea de resumen.
Por lo que nuestro historial de compromisos se vería como
$ git log
1256556316... #423 Added new slideshow feature
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... #324 Hotfix for android display issue
787g8fgf78... hotfix for #5849564648
f56556316e... #28 Implemented pop-up to select language
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Pero también podemos hacer
$ git log --first-parent
1256556316... #423 Added new slideshow feature
56556316ad... #324 Hotfix for android display issue
f56556316e... #28 Implemented pop-up to select language
(En otras palabras: el CLI de Git te permite tener tu pastel y comerlo también)
Ahora, cuando alcanzamos el problema del puntero nulo ... bueno, solo usamos git blame --first-parent -w dodgy-file.c
y de inmediato se nos da la confirmación exacta donde se introdujo la de-referencia del puntero nulo en la rama maestra, ignorando los simples cambios de espacios en blanco. >
Por supuesto, si está realizando combinaciones usando la interfaz de usuario de GitHub, git log --first-parent
es realmente horrible gracias a que GitHub forzó la primera línea del mensaje de confirmación de fusión:
1256556316... Merge pull request #423 from jrandom/add-slideshows
56556316ad... Merge pull request #324 from ahacker/fix-android-display
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
Así que para acortar una larga historia corta:
La interfaz de usuario de GitHub (octubre de 2015) tiene una serie de inconvenientes con la forma en que combina las solicitudes de extracción, la forma en que presenta el historial de confirmación y la forma en que atribuye la información de la culpa. La mejor forma actual de solucionar estos defectos en la interfaz de usuario de GitHub es solicitar a las personas que aplasten sus compromisos antes de fusionarse.
El CLI de Git no tiene estos problemas y puede elegir fácilmente qué vista desea ver para que ambos puedan descubrir la razón por la que un cambio en particular se realizó de esa manera (al mirar el historial de los comillas no escritas) así como ver los compromisos efectivamente aplastados.
Publicar guión
La razón final a menudo citada para los intentos de aplastamiento es hacer que el backporting sea más fácil ... si solo tiene un compromiso para el puerto de retroceso (es decir, el compromiso aplastado), entonces es fácil elegirlo ...
Bueno, si estás viendo el historial de git con git log --first-parent
, entonces puedes seleccionar las confirmaciones de fusión. La mayoría de la gente se confunde con las combinaciones de selección de cherry porque tiene que especificar la opción -m N
pero si recibió la confirmación de git log --first-parent
, entonces sabe que es el primer padre que desea seguir, así que será git cherry-pick -m 1 ...