Git para desarrollador en solitario: fusionar vs rebase

Soy un desarrollador solo y estoy empezando a usar Git con repositorys privados de BitBucket. La única cosa en la que no tengo claro es Merge versus Rebase.

Con frecuencia cambio de computadora de escritorio a laptop y uso BB para acceder al código más reciente en cualquiera de las plataforms. He estado usando rebase cuando cargo el último código comprometido, porque creo que básicamente borra todo en esa plataforma (computadora de escritorio o portátil) y me asegura que tengo el código idéntico al de BB. ¿Es eso correcto? ¿Cuándo debería usar fusionarme a tal acción?

merge hace como su nombre lo dice, combina dos twigs de desarrollo en una. Así que imagina que tienes una twig principal en commit M1. Luego trabajas en tu cuaderno y creas commit N. Y también trabajas en tu escritorio y creas commit L:

  N / M1-L 

Cuando fusionas N en L, combinas los cambios y obtienes un nuevo compromiso M2

  N / \ M1-L-M2 

Esto mantiene todos los cambios tal como fueron hechos, pero obtienes estos pequeños paths dobles, que pueden ser bastante confusos, especialmente cuando tienes muchos de ellos.

Luego hay rebase. A partir de la misma situación, una rebase toma uno de los commit N o L y pretende que fue hecho después del otro. Esto da como resultado un nuevo compromiso n '

 M1-LN' 

N 'y M2 tienen el mismo contenido, solo que su historia se ve diferente. Mientras estés solo, no importa. Tendrás un estado actual en ambos sentidos

Si estás en un equipo, la diferencia se vuelve importante:

Cuando restaure una twig que ya ha sido arrastrada por otra persona, podría ver algunos efectos confusos ya que la twig en la que estaba trabajando de repente contiene confirmaciones completamente diferentes. Por lo tanto, no desea volver a establecer la base de las cosas que se publicaron.

Por otro lado, si tienes diez desarrolladores que se comprometen y se fusionan como el infierno, la historia se vuelve confusa y es posible que prefieras que los desarrolladores trabajen en repositorys privados y luego rebase antes de enviar a la twig de integración.

rebase y merge son diferentes types de estrategias para actualizar su sucursal con otra sucursal. rebase cambia el historial al punto donde ambas twigs comenzaron a divergir. combinar, por otro lado, no altera el historial y puede crear un nuevo compromiso para mostrar la fusión de dos twigs.

Ver también este documento en rebase vs merge. En resumen: use rebase para cambios no utilizados para crear un historial orderado; de lo contrario, use fusionar.

Actualización: Linus escribió sobre esto en 2009, ver sus consejos sobre git rebase y merge . En pocas palabras: rebase solo sus cosas privadas, con precaución. Si tus commits han sido empujados, no más rebasing.