git pull VS git fetch git rebase

Otra pregunta dijo que git pull es como un git fetch + git merge .

Pero, ¿cuál es la diferencia entre git pull VS git fetch + git rebase ?

Debería ser bastante obvio por su pregunta que en realidad solo está preguntando sobre la diferencia entre git merge y git rebase .

Así que supongamos que estás en el caso común: has hecho algún trabajo en tu twig principal, y sacas de origen, lo que también ha hecho un poco de trabajo. Después de la búsqueda, las cosas se ven así:

 - o - o - o - H - A - B - C (master) \ P - Q - R (origin/master) 

Si te fusionas en este punto (el comportamiento pnetworkingeterminado de git pull), suponiendo que no haya ningún conflicto, terminas con esto:

 - o - o - o - H - A - B - C - X (master) \ / P - Q - R --- (origin/master) 

Si, por otro lado, hicieras la rebase adecuada, terminarías con esto:

 - o - o - o - H - P - Q - R - A' - B' - C' (master) | (origin/master) 

El contenido de su tree de trabajo debería terminar igual en ambos casos; acabas de crear una historia diferente antes de eso . La rebase reescribe su historial, haciendo que parezca como si se hubiera comprometido encima de la nueva twig principal ( R ) del origen, en lugar de donde se comprometió originalmente ( H ). Nunca debe usar el enfoque de rebase si alguien más ya ha sacado de su twig principal.

Por último, tenga en count que en realidad puede configurar git pull para una twig determinada para usar rebase en lugar de merge configurando la branch.<name>.rebase parámetro config branch.<name>.rebase en true. También puede hacer esto para una sola extracción usando git pull --rebase .

En respuesta a su primera statement, 'git pull' es como un git fetch + git merge. ',

"En su modo pnetworkingeterminado, git pull es una abreviatura de git fetch seguido de git merge FETCH_HEAD" Más precisamente, git pull ejecuta git fetch con los parameters dados y llama a git merge para fusionar los encabezados de las twigs recuperadas en la twig actual "

(Ref: https://git-scm.com/docs/git-pull )

Para su segunda statement / pregunta: '¿Pero cuál es la diferencia entre git pull VS git fetch + git rebase' De nuevo, desde la misma fuente:

"Con –rebase, se ejecuta git rebase en lugar de git merge".

Ahora, si desea preguntar la diferencia entre fetch y merge, eso también se responde aquí: https://git-scm.com/book/en/v2/Git-Branching-Rebasing (la diferencia entre alterar el modo historia de la versión) está grabado y qué no)