O que é o Git fast-forwarding? [duplicado]
esta pergunta já tem uma resposta aqui:
é correcto assumir que o fast-forward significa que todos os commits são reproduzidos no ramo alvo e o HEAD
está definido como o último compromisso naquele ramo?
2 answers
Quando você tenta fundir um commit com um commit que pode ser alcançado seguindo o histórico do primeiro commit, o Git simplifica as coisas movendo o ponteiro para a frente porque não há trabalho divergente para se fundir – isto é chamado de "fast-forward"."
Para mais: http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
De outra forma,Se o Mestre não divergiu, em vez de criar um novo commit, o git irá basta apontar o mestre para o o envio mais recente do ramo de recursos. Este é um "fast forward"."Não haverá nenhum" merge commit " na junção de encaminhamento rápido.
No Git, "avançar rapidamente" significa actualizar o {[[0]} ponteiro de tal forma que o seu novo valor seja um descendente directo do valor anterior. Por outras palavras, o valor anterior é um progenitor, um avô ou um avô ...
O encaminhamento rápido não é possível quando o novo {[[0]} está num estado divergente em relação ao fluxo que pretende integrar. Por exemplo, você está em master
e tem commits locais, e git fetch
trouxe novos commits upstream para origin/master
. O ramo agora desvia-se do seu rio e não pode ser rapidamente encaminhado:master
HEAD
o commit não é um ancestral de origin/master
HEAD
. Para simplesmente reiniciar master
para o valor de origin/master
iria descartar os seus commits locais. A situação requer um ajuste de base ou junção.
Se o seu local master
não tiver alterações, então pode ser rápido-encaminhado: simplesmente actualizado para apontar para o mesmo commit que o mais recente origin/master
. Normalmente, não são necessários passos especiais para fazer o encaminhamento rápido; é feito por merge
ou rebase
na situação em que há não existem commits locais.
é correcto assumir que o fast-forward significa que todos os commits são reproduzidos no ramo alvo e o cabeçalho é definido para o último commit nesse ramo?
Não, isso é chamado rebasing , dos quais fast-forwarding é um caso especial quando não há nenhum commits a ser replayed (e o branch alvo tem novos commits, e o histórico do branch alvo não foi reescrito, de modo que todos os commits no branch alvo têm a actual como ancestral.)