Quais são as diferenças entre os seguintes comandos ?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
O manual do diff fala sobre isso:
Comparando ramos
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- Alterações entre as dicas do tópico e as ramificações principais.
- O mesmo que acima.
- Alterações que ocorreram na ramificação principal desde quando a ramificação do tópico foi iniciada.
mas não está totalmente claro para mim.
..
e...
emgit diff
e seus diferentes significados emgit log
.Respostas:
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 quegit diff foo bar
; ambos mostrarão a diferença entre as pontas dos dois ramosfoo
ebar
. Por outro lado,git diff foo...bar
mostrará a diferença entre a "base de mesclagem" dos dois ramos e a ponta debar
. 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 trabalhobar
, ignorando tudo o que foi feitofoo
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 comogit log
que espera um conjunto de commits como um ou mais argumentos. (Todos esses comandos acabam usandogit rev-list
para analisar uma lista de confirmações de seus argumentos.)O significado de
..
e...
paragit log
pode ser mostrado graficamente como abaixo:Então,
git rev-list foo..bar
mostra tudo no ramobar
que também não está no ramofoo
. Por outro lado,git rev-list foo...bar
mostra todos os commits que estão em umfoo
oubar
, 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.fonte
git diff
diagramas que farei mais tarde...
e...
sensação revertida emgit diff
(em comparação comgit rev-list
)!git diff foo..bar
é exatamente o mesmo quegit diff foo bar
; ambos mostrarão a diferença entre as pontas dos dois galhos foo e bar". O que exatamente você quer dizer com "diferença entre as pontas dos dois galhos"?Minha versão consolidada do .. vs ... with diff vs log
fonte
..
/...
stuff. Por exemplolog A...B
, não está claro se o comando retorna a interseção (parte branca do diagrama) ou o restante da união AB (verde). Seria mais direto ao ponto sem operandos definidos e com apenas uma cor.diff A..B
<—>log A...B
, ou seja, realmente difere com 2 pontos, corresponde ao log com 3 (!) Pontos? Ou há um erro de digitação na imagem. Observando como os pontos são codificados por cores, parece-me que há um erro de digitação na imagem. O canto inferior esquerdo:log A...B
deve estarlog A..B
, certo (?). E log apenas para a direita...
não deve ser..
.git diff foo master
A diferença entre o topo (cabeça) compromete o foo e o mestre.git diff foo..master
Outra maneira de fazer a mesma coisa.git diff foo...master
Difere do ancestral comum (git merge-base foo master
) de foo e master para a ponta do master. Em outras palavras, mostra apenas as alterações que o ramo principal introduziu desde seu ancestral comum com foo.Este exemplo do GitHub explica quando usar os dois:
fonte
mostrará as diferenças entre o tópico e a ramificação principal naquele momento
isso também mostrará as diferenças entre o tópico e a ramificação principal naquele momento
isso mostrará todas as diferenças entre quando o tópico foi criado a partir do ramo e depois
então os 2 primeiros comandos são os mesmos e o último mostra apenas uma visão mais ampla no histórico do diff
fonte
A imagem superior é equivalente à árvore do gráfico inferior
Uma imagem vale mais que mil palavras, a diferença entre
..
...
^
é mostrada abaixo.fonte