Entendendo "git pull --rebase" vs "git rebase"

De acordo com meu entendimento degit pull --rebase origin master, deve ser o equivalente à execução dos seguintes comandos:

(from branch master):  $ git fetch origin
(from branch master):  $ git rebase origin/master

Parece que encontrei algum caso em que isso não funciona como esperado. No meu espaço de trabalho, tenho a seguinte configuração:

ramoorigin/master ramo de referênciasmaster no controle remotooriginramomaster está configurado para rastrearorigin/master, e éatrás mestre por vários commits.ramofeature está configurado para rastrear filial localmastereadiante domaster por vários commits.

Às vezes, perderei confirmações executando a seguinte sequência de etapas

(from branch master):  $ git pull --rebase
(from branch master):  $ git checkout feature
(from branch feature): $ git pull --rebase

Neste ponto, os poucos commits à frente em que eu estavafeature agora foram perdidos. Agora, se eu redefinir minha posição e, em vez disso, faça o seguinte:

(from branch feature): $ git reset --hard HEAD@{2} # rewind to before second git pull
(from branch feature): $ git rebase master

As confirmações foram aplicadas corretamente e minhas novas confirmações emfeature ainda estão presentes. Isso parece contradizer diretamente minha compreensão de comogit pull funciona, a menos quegit fetch . faz algo mais estranho do que eu esperava.

Infelizmente, isso não é 100% reproduzível para todas as confirmações. Quando funciona para uma confirmação, no entanto, funciona sempre.

Nota: Minhasgit pull --rebase aqui deve realmente ser lido como um--rebase=preserve, se isso importa. Eu tenho o seguinte no meu~/.gitconfig:

[pull]
    rebase = preserve