Alguns comandos Git assumem intervalos de confirmação e uma sintaxe válida é separar dois nomes de confirmação com dois pontos ..
, e outra sintaxe usa três pontos ...
.
Quais sao as diferenças entre os dois?
Alguns comandos Git assumem intervalos de confirmação e uma sintaxe válida é separar dois nomes de confirmação com dois pontos ..
, e outra sintaxe usa três pontos ...
.
Quais sao as diferenças entre os dois?
Respostas:
Depende se você está usando um log
comando ou um diff
comando. No log
caso, está na man git-rev-parse
documentação:
Para excluir confirmações acessíveis de uma confirmação, é usada uma notação de prefixo ^. Por exemplo, ^ r1 r2 significa commit acessível a partir de r2, mas exclui os acessíveis a partir de r1.
Essa operação de conjunto aparece com tanta frequência que existe uma abreviação para isso. Quando você possui dois commits r1 e r2 (nomeados de acordo com a sintaxe explicada em ESPECIFICANDO REVISÕES acima), você pode solicitar commits acessíveis a partir de r2, excluindo aqueles acessíveis a partir de r1 por "^ r1 r2" e pode ser escrito como "r1..r2".
Uma notação semelhante "r1 ... r2" é chamada de diferença simétrica de r1 e r2 e é definida como "r1 r2 - e não $ (git merge-base - all r1 r2)". É o conjunto de confirmações que é alcançável a partir de um de r1 ou r2, mas não de ambos.
O que basicamente significa que você obterá todos os commits que estão em um dos dois ramos, mas não nos dois.
No diff
caso, está na man git-diff
documentação:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
O que é um pouco confuso. Basicamente, significa que mostra apenas as diferenças nesse ramo em comparação com outro ramo: ele procura o último commit comum com o primeiro commit que você deu e depois difere o segundo commit para isso. É uma maneira fácil de ver quais alterações são feitas nesse ramo, em comparação com esse ramo, sem observar apenas as alterações nesse ramo.
O ..
é um pouco mais simples: no git-diff
caso, é o mesmo que a git diff A B
e apenas diferencia A contra B. No log
caso, mostra todos os commits que estão em B, mas não em A.
..
e ...
é exatamente trocado por log e diff: log A..B
é alteração da base de mesclagem para B que é o que diff A...B
faz
git diff
.
A...B
== A..B + B..A
?
git log
isso é absolutamente sim
Quando você usa intervalos de confirmação como ..
e ...
com git log
, a diferença entre eles é que, para os ramos A e B,
git log A..B
mostrará todos os commits que B possui que A não possui , enquanto
git log A...B
irá mostrar-lhe ambos os commits que um tem e que B não têm, e os commits que B tem que A não tem, ou em outras palavras, ele irá filtrar todos os commits que ambos A e B share, mostrando apenas os commits que eles não compartilham .
Aqui está uma representação visual de git log A..B
. As confirmações que a ramificação B contém que não existem em A são retornadas pelo intervalo de confirmação, destacadas em vermelho no diagrama de Venn e circuladas em azul na árvore de confirmação:
Estes são os diagramas para git log A...B
. Observe que as confirmações compartilhadas por ambas as ramificações não são retornadas pelo comando:
...
mais útilVocê pode tornar o intervalo de confirmação de pontos triplos ...
mais útil em um comando de log usando a --left-right
opção para mostrar quais confirmações pertencem a qual ramificação:
$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt
Na saída acima, você verá que os commits que pertencem master
são prefixados <
, enquanto os commit que pertencem origin/master
são prefixados >
.
Algum dia eu poderia adicionar minha própria explicação sobre como os intervalos de confirmação funcionam git diff
, mas por enquanto, você pode querer verificar quais são as diferenças entre ponto duplo ".." e ponto triplo "..." no commit do Git diff gamas? .