Git Pull vs Git Rebase

123

Eu sou um noob no Git, e tentando aprender a diferença entre git pullvs git rebase. Alguém pode dar um exemplo de quando usar qual opção, já que sinto que ambas têm o mesmo propósito.

user4943236
fonte
Sim eu fiz. A diferença entre pull e rebase é que pull faz uma fusão. Portanto, a resposta à sua pergunta está no link que colei.
Thibault D.
1
@ user4943236 1) você nem sabe quem votou contra a sua pergunta, não saia por aí acusando as pessoas sem motivo 2) se fosse o meu voto negativo, eu não o removeria simplesmente porque é tão fácil encontrar uma resposta lendo documentação
Tim
Isso responde sua pergunta? git pull VS git fetch Vs git rebase
Shiwangini

Respostas:

130

git pulle git rebasenão são intercambiáveis, mas estão intimamente ligados.

git pullobtém as alterações mais recentes do branch atual de um remoto e aplica essas alterações à sua cópia local do branch. Geralmente, isso é feito por mesclagem, ou seja, as mudanças locais são mescladas com as mudanças remotas. Então git pullé semelhante a git fetch & git merge.

Rebasing é uma alternativa à fusão. Em vez de criar um novo commit que combina os dois branches, ele move os commits de um dos branches para cima do outro.

Você pode fazer pull usando rebase em vez de merge ( git pull --rebase). As alterações locais que você fez serão realocadas sobre as alterações remotas, em vez de serem mescladas com as alterações remotas.

Atlassian tem uma documentação excelente sobre fusão vs. rebase .

Peter
fonte
51

git-pull - Buscar e integrar com outro repositório ou um branch local GIT PULL

Basicamente, você está puxando um branch remoto para seu local, por exemplo:

git pull origin master

Irá puxar o branch master para o seu repositório local

git-rebase - Forward-port local commits para o upstream head GIT REBASE atualizado

Este é colocar suas mudanças locais no topo das mudanças feitas remotamente por outros usuários. Por exemplo:

  • Você comprometeu algumas mudanças em sua filial local, por exemplo, chamadas SOME-FEATURE
  • Nesse ínterim, seu amigo estava trabalhando em outros recursos e fundiu seu branch no master

Agora você deseja ver as mudanças dele e de sua filial local. Então você checkout masterbranch:

git checkout master

então você pode puxar:

git pull origin master

e então você vai para sua filial:

git checkout SOME-FEATURE

e você pode fazer o rebase masterpara obter as últimas alterações dele e colocar seus commits de branch no topo:

git rebase master

Espero que agora esteja um pouco mais claro para você.

Tomasz
fonte
15
Você não precisa fazer o checkout mestre. Fique no seu ramo e faça: git fetchentão git rebase origin/master.
Antoine Martin
Ao verificar o mestre local e, em seguida, puxar o mestre de origem, o mestre local também será atualizado. Esta é uma das melhores práticas que deve ser usada
Ashwani,
20

Resumindo:

-> Git Merge: Ele simplesmente mesclará suas alterações e as remotas, e isso criará outro registro de histórico de commits

-> Git Rebase: Colocará suas mudanças acima de todas as novas mudanças remotas e reescreverá o histórico de commits, então seu histórico de commits será muito mais limpo do que o git merge. Rebase é uma operação destrutiva. Isso significa que, se você não aplicá-lo corretamente, poderá perder o trabalho confirmado e / ou quebrar a consistência dos repositórios de outros desenvolvedores.

Saurin Vala
fonte