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 logcomando ou um diffcomando. No logcaso, está na man git-rev-parsedocumentaçã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 diffcaso, está na man git-diffdocumentaçã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-diffcaso, é o mesmo que a git diff A Be apenas diferencia A contra B. No logcaso, 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...Bfaz
git diff.
A...B== A..B + B..A?
git logisso é 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-rightopçã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 mastersão prefixados <, enquanto os commit que pertencem origin/mastersã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? .