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 remotooriginramamaster está configurado para rastrearorigin/master, y esdetrás maestro por varios commits.ramafeature está configurado para rastrear sucursal localmasteryadelante 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