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 remotoorigin
ramomaster
está configurado para rastrearorigin/master
, e éatrás mestre por vários commits.ramofeature
está configurado para rastrear filial localmaster
eadiante 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