Quais são as diferenças entre o double-dot “..” e triple-ponto “...” em git commit faixas?

StackOverflow https://stackoverflow.com/questions/462974

  •  19-08-2019
  •  | 
  •  

Pergunta

Alguns comandos Git tomar cometer faixas e uma sintaxe válida é separar dois cometer nomes com dois pontos .., e outra sintaxe usa três pontos ....

Quais são as diferenças entre os dois?

Foi útil?

Solução

Depende se você estiver usando um comando log ou um comando diff. No caso log, é na documentação man git-rev-parse:

Para excluir commits alcançáveis ??a partir de um commit, um prefixo ^ notação é usada. Por exemplo. ^ Meios R1 R2 compromete acessível a partir r2 mas excluem os acessível a partir de R1.

Esta operação set aparece tantas vezes que há um atalho para ele. Quando você tem dois commits R1 e R2 (nomeado de acordo com a sintaxe explicada em ESPECIFICANDO REVISÕES acima), você pode pedir commits que são acessíveis de r2 excluindo aqueles que são acessível a partir de R1 por "^ r1 r2" e pode ser escrito como "r1..r2".

A notação similar "R1 ... R2" é chamado de diferença simétrica de R1 e r2 e é definido como "r1 r2 --não $ (Merge-base de git --all R1 R2)". É o conjunto de commits que são acessível a partir de qualquer um de R1 ou R2 mas não de ambos.

que basicamente significa que você vai ter todos os commits que estão em qualquer um dos dois ramos, mas não em ambos.

No caso diff, é na documentação man git-diff:

  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 isso significa que ele mostra apenas as diferenças nesse ramo em comparação com outro ramo: ele olha para o passado comum comprometer com o primeiro committish você deu, e depois diffs o segundo committish a isso. É uma maneira fácil de ver o que as mudanças são feitas nesse ramo, em comparação a este ramo, sem tomar conhecimento das mudanças neste ramo única.

O .. é um pouco mais simples:. No caso git-diff, é o mesmo que um git diff A B e apenas diffs A contra B. No caso log, ele mostra todas as submissões que estão em B, mas não em A

Outras dicas

Usando Commit Ranges com Git Log

Quando você estiver usando cometer faixas como .. e ... com git log, a diferença entre eles é que, para ramos A e B,

git log A..B

irá mostrar-lhe todos os commits que B tem que A não tem , enquanto

git log A...B

irá mostrar-lhe ambos os commits que A tem e que B não tem, e os commits que B tem que A não tem, ou em outra palavras, ele irá filtrar todos os commits que ambos a e B compartilham, portanto, só mostrando os commits que eles não ambos compartilham .

Visualização com diagramas de Venn e Commit Trees

Aqui está uma representação visual do git log A..B. As submissões que ramo B contém que não existem em que A é o que é retornado pela comprometer gama, e é destacado em vermelho no diagrama de Venn, e circulado em azul no cometer árvore:

 "A..B git log" diagrama Árvore 1

Estes são os diagramas para git log A...B. Observe que os commits que são compartilhada por ambos os ramos não são devolvidos pelo comando:

 "git log A ... B" diagrama Árvore 2

Fazendo o Triple-Dot Commit Faixa ... Mais Útil

Você pode fazer o triple-dot cometer ... gama mais útil em um comando de log usando a opção --left-right para mostrar quais commits pertencem a qual ramo:

$ 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á os commits que pertencem a master são prefixados com <, enquanto commits que pertencem a origin/master são prefixados com >.

Usando Commit Ranges com git diff

Um dia eu poderia acrescentar a minha própria explicação de como a intervalos de trabalho com git diff cometer, mas por agora, você pode querer verificar Quais são as diferenças entre o double-dot" .. "e triple-dot" ..." no git diff cometer intervalos? .

Consulte também

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top