Me gustaría ofrecer una perspectiva diferente sobre lo que realmente significa "git pull --rebase", porque a veces parece perderse.
Si alguna vez ha usado Subversion (o CVS), puede estar acostumbrado al comportamiento de "svn update". Si tiene cambios para confirmar y el compromiso falla porque los cambios se han realizado en sentido ascendente, "svn update". Subversion procede fusionando los cambios aguas arriba con los suyos, lo que puede generar conflictos.
Lo que Subversion acaba de hacer es esencialmente "pull --rebase". El acto de reformular sus cambios locales para que sean relativos a la versión más nueva es la parte de "rebase". Si había hecho "svn diff" antes del intento de confirmación fallido, y luego compara el diff resultante con la salida de "svn diff", la diferencia entre los dos diffs es lo que hizo la operación de rebase.
La principal diferencia entre Git y Subversion en este caso es que en Subversion, "sus" cambios solo existen como cambios no confirmados en su copia de trabajo, mientras que en Git tiene confirmaciones reales localmente. En otras palabras, en Git has bifurcado la historia; su historia y la historia aguas arriba han divergido, pero usted tiene un antepasado común.
En mi opinión, en el caso normal de que su rama local simplemente refleje la rama ascendente y realice un desarrollo continuo en ella, lo correcto es siempre "--rebase", porque eso es lo que está haciendo semánticamente . Usted y otros están pirateando la historia lineal prevista de una rama. El hecho de que alguien más haya empujado un poco antes de su intento de empuje es irrelevante, y parece contraproducente que cada accidente de tiempo resulte en fusiones en la historia.
Si realmente siente la necesidad de que algo sea una rama por cualquier razón, esa es una preocupación diferente en mi opinión. Pero a menos que tenga un deseo específico y activo de representar sus cambios en forma de fusión, el comportamiento predeterminado debería, en mi opinión, ser "git pull --rebase".
Considere a otras personas que necesitan observar y comprender la historia de su proyecto. ¿Desea que la historia esté plagada de cientos de fusiones por todo el lugar, o desea solo las pocas fusiones seleccionadas que representan fusiones reales de esfuerzos de desarrollo divergentes intencionales?