Outra pergunta dita git pull
é como um git fetch
+ git merge
.
Mas qual é a diferença entre o git pull
VS git fetch
+ git rebase
?
Outra pergunta dita git pull
é como um git fetch
+ git merge
.
Mas qual é a diferença entre o git pull
VS git fetch
+ git rebase
?
Respostas:
Deve ser bastante óbvio da sua pergunta que você realmente está apenas perguntando sobre a diferença entre git merge
e git rebase
.
Então, vamos supor que você esteja no caso comum - você fez algum trabalho em sua ramificação principal e extraiu da origem, que também fez algum trabalho. Após a busca, as coisas ficam assim:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
Se você mesclar neste momento (o comportamento padrão do git pull), supondo que não haja conflitos, você termina com isso:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
Se, por outro lado, você fez a rebase apropriada, você terminaria com isso:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
O conteúdo da sua árvore de trabalho deve terminar o mesmo nos dois casos; você acabou de criar uma história diferente que antecede a ela . A reescrita reescreve seu histórico, fazendo parecer que você havia confirmado no topo da nova ramificação principal da origem ( R
), em vez de onde você originalmente confirmou ( H
). Você nunca deve usar a abordagem de rebase se outra pessoa já tiver saído de sua ramificação principal.
Por fim, observe que você pode realmente configurar git pull
uma ramificação para usar rebase em vez de mesclar, definindo o parâmetro config branch.<name>.rebase
como true. Você também pode fazer isso para uma única puxada usando git pull --rebase
.
git pull
é como correr git fetch
então git merge
git pull --rebase
é como git fetch
entãogit rebase
git pull
é como um git fetch
+ git merge
.
"No modo padrão, git pull é uma abreviação para
git fetch
seguido porgit merge
FETCH_HEAD" Mais precisamente,git pull
é executadogit fetch
com os parâmetros fornecidos e depois chamagit merge
para mesclar as cabeças de ramificação recuperadas na ramificação atual "
(Ref: https://git-scm.com/docs/git-pull )
'Mas qual é a diferença entre git pull
VS git fetch
+git rebase
'
Novamente, da mesma fonte:
git pull --rebase
"Com --rebase, ele executa git rebase em vez de git merge."
'a diferença entre merge
e rebase
'
isso também é respondido aqui:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(a diferença entre alterar a maneira como o histórico da versão é registrado)
git fetch + git rebase
comandos funcionam a partir de agora. Não há mais ou menos conflito em nossa árvore git a partir de agora :)