Eu simplesmente não consigo entender isso. Eu tenho lido muito na web e livros e algo simplesmente não fica na minha cabeça. Alguém pode me dar a versão fictícia do seguinte:
- git fetch vs pull
- git merge vs rebase
Eu simplesmente não consigo entender isso. Eu tenho lido muito na web e livros e algo simplesmente não fica na minha cabeça. Alguém pode me dar a versão fictícia do seguinte:
Respostas:
fetch fará o download de quaisquer alterações do branch * remoto, atualizando os dados do repositório, mas mantendo o branch * local inalterado.
pullrealizará fetche, adicionalmente, mergeas alterações em sua filial local.
Qual é a diferença? pullatualiza a ramificação local com as alterações da ramificação puxada. A fetchnão avança sua filial local.
Dada a seguinte história:
C --- D --- E local
/
Controle remoto A --- B --- F --- G
mergeune duas histórias de desenvolvimento. Isso é feito repetindo as alterações que ocorreram na sua filial local após divergir na parte superior da ramificação remota e registra o resultado em uma nova confirmação. Esta operação preserva a ascendência de cada confirmação.
O efeito de a mergeserá:
C --- D --- E local
/ \
Controle remoto A --- B --- F --- G --- H
rebasereceberá confirmações existentes na sua filial local e as aplicará novamente na ramificação remota. Esta operação reescreve os ancestrais de suas confirmações locais.
O efeito de a rebaseserá:
C '- D' - E 'local
/
Controle remoto A --- B --- F --- G
Qual é a diferença? A mergenão altera a ascendência de confirmações. A rebase
reescreve a ancestralidade de seus commits locais.
*Esta explicação assume que o ramo atual é um ramo local, e que o ramo especificado como o argumento para fetch, pull, mergeou rebaseé uma filial remota. Este é o caso usual. pull, por exemplo, fará o download de quaisquer alterações da ramificação especificada , atualizará seu repositório e mergeas alterações na ramificação atual .
Fetch vs Pull
A busca Git apenas atualiza seus dados de repo, mas uma atração git basicamente realiza uma busca e mescla a ramificação retirada
Qual é a diferença entre 'git pull' e 'git fetch'?
Merge vs Rebase
Atlassian SourceTree Blog, Mesclar ou Rebase :
A mesclagem reúne duas linhas de desenvolvimento, preservando a ancestralidade de cada histórico de consolidação.
Por outro lado, o rebasing unifica as linhas de desenvolvimento reescrevendo as alterações da ramificação de origem para que elas apareçam como filhos da ramificação de destino - efetivamente fingindo que essas confirmações foram gravadas na ramificação de destino o tempo todo.
Além disso, confira o Learn Git Branching , que é um bom jogo que acaba de ser postado no HackerNews ( link para postagem ) e ensina muitos truques de ramificação e fusão. Eu acredito que será muito útil neste assunto.
git merge <remote>/<branch>. por exemplo, se você é o ramo principal e seu controle remoto é nomeado origem, você pode fazê-lo git merge origin/master.
pull vs buscar :
A maneira como eu entendo isso é que git pullé simplesmente um git fetchseguido por git merge. Ou seja, você busca as alterações em uma ramificação remota e as mescla na ramificação atual.
mesclar vs rebase :
Uma mesclagem fará como o comando diz; mesclar as diferenças entre a ramificação atual e a ramificada especificada (na ramificação atual). Ou seja, o comando git merge another_branchserá mesclado another_branchno ramo atual.
Um rebase funciona de maneira um pouco diferente e é bem legal. Digamos que você execute o comando git rebase another_branch. O Git encontrará primeiro a versão comum mais recente entre a ramificação atual e another_branch. Ou seja, o ponto antes dos galhos divergirem. Então o git moverá esse ponto divergente para a cabeça do another_branch. Finalmente, todas as confirmações no ramo atual desde o ponto divergente original são reproduzidas a partir do novo ponto divergente. Isso cria um histórico muito limpo, com menos ramificações e mesclagens.
No entanto, não é sem armadilhas! Como o histórico da versão é "reescrito", você deve fazer isso apenas se as confirmações existirem no seu repositório git local. Ou seja: nunca faça isso se você tiver enviado as confirmações para um repositório remoto.
A explicação sobre rebaseamento apresentada neste livro on - line é bastante boa, com ilustrações fáceis de entender.
puxe com rebasing em vez de mesclar
Na verdade, estou usando bastante o rebase, mas geralmente ele é combinado com o pull:
git pull --rebase
buscará alterações remotas e depois será reorganizada em vez de mesclada. Ou seja, ele reproduzirá todos os seus commit locais desde a última vez que você executou um pull. Acho isso muito mais limpo do que fazer um puxão normal com a mesclagem, o que criará um commit extra com as mesclagens.
Mesclar - o ramo HEAD gerará uma nova confirmação, preservando a ancestralidade de cada histórico de confirmação. O histórico pode ficar poluído se as confirmações de mesclagem forem feitas por várias pessoas que trabalham na mesma ramificação em paralelo.
Rebase - reescreve as alterações de uma ramificação em outra sem criar uma nova confirmação. O histórico do código é simplificado, linear e legível, mas não funciona com solicitações pull, porque você não pode ver as pequenas alterações feitas por alguém.
Eu usaria git mergeao lidar com o fluxo de trabalho baseado em recursos ou se não estiver familiarizado com a rebase. Mas, se eu quero uma história git rebasemais linear e limpa, é mais apropriado. Para mais detalhes, verifique este artigo de mesclagem ou rebase .