Como la mayoría de las personas que son nuevas en Git, he tenido mi cuota de confusión tratando de descifrar los casos de uso aplicables a git merge y git rebase. Creo que finalmente he decidido que, en lo que respecta al estado de copia de trabajo resultante, te dan lo mismo. Además, ambos resultan en los mismos conflictos. Si esto es incorrecto, por favor brinde un ejemplo para iluminarme.git workflow: fusiona y git-rerere - ¿Cuál es el punto?
Desde mi punto de vista, la principal ventaja de usar rebase en lugar de combinar (si los cambios no se han realizado) es mantener el historial lineal. Lo que realmente no entiendo es el razonamiento detrás del desarrollo de git-rerere.
Desde las páginas de manual, se supone que git-rerere lo ayudará en el caso en que intente resolver un conflicto que haya resuelto previamente. El ejemplo que estoy a punto de consultar se encuentra en http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html.
Si la política de su proyecto es no fusionar constantemente los cambios desde la línea principal en su rama de tema (como el núcleo de Linux), el ejemplo anterior dice que crear confusiones de fusión "desechables". Básicamente, combina el maestro en tu tema, ejecuta pruebas para asegurarte de que todo sigue funcionando, luego haz un "reinicio de git --hard HEAD ^", esencialmente descartando la fusión. Más adelante, cuando creas otro commit de merge "throw-away", git-rerere te ayuda a resolver los conflictos que ya has resuelto en la primera combinación de throw-away.
¿Alguien puede explicar por qué en lugar de pasar por todas las molestias de crear una confirmación de fusión temporal, el desarrollador no bastaría simplemente con volver a establecer su tema en el maestro? ¿No es ese el objetivo de git-rebase: obtener los cambios, pero evitar la fusión? ¿Esto no logra lo mismo y, suponiendo que nadie haya sacado los cambios de la rama temática, no sería un enfoque mucho más simple? ¿Es el flujo de trabajo throw-away-merge + git-rerere realmente solo para el caso cuando tus cambios han sido empujados/tirados?
Una última pregunta - Linus es citado diciendo "Pero si veo un montón de 'Merge branch linus' en tus registros, no voy a alejarte de ti, porque tu árbol obviamente tiene basura al azar en él eso no debería estar allí ... "¿Tendría también Linus un problema con las rebases constantes?
Genial, gracias por la respuesta. El comentario de corrección de errores - rama de la última confirmación que es un antepasado de ambos, en realidad fue muy esclarecedor. Parece una idea simple, pero estaba bajo la impresión de que uno debería ramificarse desde la punta de una rama de la maintentance, y luego seleccionar el arreglo de errores para el maestro.Sin embargo, este enfoque parece mucho más limpio, y evita necesariamente el rebasamiento. – Josh
@ user370562: El principio aquí es fusionar hacia arriba/hacia arriba, y crear sus ramas de tal manera que eso sea posible. (Por cierto, las ramas de mantenimiento con frecuencia se pueden fusionar de nuevo con el maestro, las correcciones de errores que ha realizado en v5 probablemente todavía se apliquen a la versión en desarrollo v6.) La mayoría de las sugerencias de flujos de trabajo enfatizan la fusión hacia arriba, consulte 'man gitworkflows', por ejemplo . ¡Me alegra ser de ayuda! – Cascabel