Comprender "git pull --rebase" vs "git rebase"
Según mi comprensión degit pull --rebase origin master
, debería ser el equivalente a ejecutar los siguientes comandos:
(from branch master): $ git fetch origin
(from branch master): $ git rebase origin/master
Parece que encontré algún caso en el que esto no funciona como se esperaba. En mi espacio de trabajo, tengo la siguiente configuración:
ramaorigin/master
rama de referenciasmaster
en remotoorigin
ramamaster
está configurado para rastrearorigin/master
, y esdetrás maestro por varios commits.ramafeature
está configurado para rastrear sucursal localmaster
yadelante demaster
por varios commits.A veces, pierdo confirmaciones ejecutando la siguiente secuencia de pasos
(from branch master): $ git pull --rebase
(from branch master): $ git checkout feature
(from branch feature): $ git pull --rebase
En este punto, las pocas confirmaciones por delante en las que estabafeature
ahora se ha perdido Ahora, si restablezco mi posición, y en su lugar hago lo siguiente:
(from branch feature): $ git reset --hard HEAD@{2} # rewind to before second git pull
(from branch feature): $ git rebase master
Los commits se han aplicado correctamente y mis nuevos commits enfeature
Todavía están presentes. Esto parece contradecir directamente mi comprensión de cómogit pull
funciona, a menos quegit fetch .
hace algo más extraño de lo que esperaba.
Desafortunadamente, esto no es 100% reproducible para todos los commits. Sin embargo, cuando funciona para un commit, funciona siempre.
Nota: Migit pull --rebase
aquí en realidad debería leerse como un--rebase=preserve
, si eso importa. Tengo lo siguiente en mi~/.gitconfig
:
[pull]
rebase = preserve