Como já criei essas imagens, pensei que valeria a pena usá-las em outra resposta, embora a descrição da diferença entre ..
(ponto-ponto) e ...
(ponto-ponto-ponto) seja essencialmente a mesma que na resposta de manojlds .
O comando git diff
normalmente¹ mostra apenas a diferença entre os estados da árvore entre exatamente dois pontos no gráfico de confirmação. As notações ..
e têm os seguintes significados:...
git diff
Em outras palavras, git diff foo..bar
é exatamente o mesmo que git diff foo bar
; ambos mostrarão a diferença entre as pontas dos dois ramos foo
e bar
. Por outro lado, git diff foo...bar
mostrará a diferença entre a "base de mesclagem" dos dois ramos e a ponta de bar
. A "base de mesclagem" geralmente é a última confirmação em comum entre essas duas ramificações; portanto, este comando mostra as alterações introduzidas pelo seu trabalho bar
, ignorando tudo o que foi feito foo
nesse meio tempo.
É tudo o que você precisa saber sobre as anotações ..
e . Contudo......
git diff
... uma fonte comum de confusão aqui é que ..
e ...
significar coisas sutilmente diferentes quando usado em um comando como git log
que espera um conjunto de commits como um ou mais argumentos. (Todos esses comandos acabam usando git rev-list
para analisar uma lista de confirmações de seus argumentos.)
O significado de ..
e ...
para git log
pode ser mostrado graficamente como abaixo:
Então, git rev-list foo..bar
mostra tudo no ramo bar
que também não está no ramo foo
. Por outro lado, git rev-list foo...bar
mostra todos os commits que estão em um foo
ou bar
, mas não em ambos . O terceiro diagrama mostra apenas que, se você listar as duas ramificações, obtém as confirmações que estão em uma ou em ambas.
Bem, acho que tudo isso é um pouco confuso, e acho que os diagramas de gráfico de confirmação ajudam :)
¹ Digo apenas "normalmente", pois ao resolver conflitos de mesclagem, por exemplo, git diff
mostramos uma mesclagem de três vias.
..
e...
emgit diff
e seus diferentes significados emgit log
.