Visualizando topologia de ramos no git

Estou a brincar com o git em isolamento na minha própria máquina, e acho difícil manter um modelo mental de todos os meus ramos e compromissos. Eu sei que posso fazer um git log para ver a história do commit de onde estou, mas existe uma maneira de ver toda a topografia do ramo, algo como estes mapas ascii que parecem ser usados em todos os lugares para explicar ramos?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'
Parece que alguém a vir buscar o meu repositório teria dificuldade em trabalhar exactamente. o que se estava a passar.

acho que sou influenciado pelo navegador de fluxo do AccuRev ...

Author: agm1984, 2009-12-03

28 answers

git log --graph ou gitk. (Ambos também aceitam --all, que irá mostrar todos os ramos em vez de apenas o actual.)

Editar: Para os nomes dos ramos e uma vista compacta, tente: git log --graph --decorate --oneline

 874
Author: jrockway, 2016-07-16 21:49:57

Normalmente uso

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

Com cores (se a sua concha é Bash):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

Isto irá imprimir uma representação baseada em texto como esta:

* 040cc7c       (HEAD, master) Mannual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work succesfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(Você pode usar git log --format=oneline, mas vai ligar as mensagens de commit a números, o que parece menos bonito IMHO).

Para criar um atalho para este comando, poderá querer editar o seu ficheiro ~/.gitconfig:

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

No entanto, como Sodel as notas Vociferosas nos comentários, tal comando de formatação longa é difícil de memorizar. Normalmente, não é um problema, pois você pode colocá-lo no Arquivo ~/.gitconfig. No entanto, se você às vezes tiver que fazer login em uma máquina remota onde você não pode modificar o arquivo de configuração, você poderia usar uma versão mais simples, mas mais rápida para digitar:

git log --graph --oneline
 438
Author: P Shved, 2017-05-23 12:18:24

: tenho 3 pseudónimos (e 4 pseudónimos para utilização rápida) que normalmente junto no meu ficheiro ~/.gitconfig:

[alias]
    lg = !"git lg1"
    lg1 = !"git lg1-specific --all"
    lg2 = !"git lg2-specific --all"
    lg3 = !"git lg3-specific --all"

    lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
    lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

git lg/git lg1 parece isto:

git lg1

git lg2 parece isto:

git lg2

E git lg3 parece-se com isto:

git lg3

Nota: resposta copiada e melhorada após a resposta em stackoverflow.com/questions/1057564/pretty-git-branch-graphs uma vez que é muito mais apropriado aqui do que lá estava.  Deixou a cópia na outra pergunta por razões históricas-está fechada agora, e a resposta é referenciada por um monte de outras respostas.

 343
Author: Slipp D. Thompson, 2017-05-23 10:31:37

A qualquer uma destas receitas (com base no registo do git ou no gitk), você pode adicionar --simplify-by-decoration para fechar as partes lineares desinteressantes do histórico. Isto torna muito mais visível a topologia ao mesmo tempo. Posso agora compreender grandes histórias que seriam incompreensíveis sem esta opção!

Senti a necessidade de postar isto porque não parece ser tão conhecido como deveria ser. Não aparece na maioria das questões sobre o excesso de pilha sobre visualizar a história, e levou-me bastante um pouco de procura para encontrar ... mesmo depois de saber que o queria! Finalmente encontrei-o Neste relatório de erros do Debian . A primeira menção no Stack Overflow parece ser a resposta de Antoine Pelisse.
 202
Author: Andrew, 2017-05-23 10:31:37

Gitk um dia doloroso para mim ler.

enter image description here

Motive - me a escrever GitVersionTree.

enter image description here

 58
Author: checksum, 2013-08-17 10:18:55

"99.999% do meu tempo está a olhar para a história por git lg e o 0, 001% é por git log"

Só quero partilhar dois nomes falsos que podem ser úteis. (configure from .gitconfig)
[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg irá ver o histórico do ramo actual.
  • git hist vai ver toda a história do ramo.
 45
Author: Yeo, 2017-02-09 23:04:44
Eu gosto, com ... git log, para fazer:
 git log --graph --oneline --branches

(também com --all, para ver os ramos remotos também)

Trabalha com versões recentes do Git: introduzido desde 1.6.3 (qui, 7 de Maio 2009)

  • "--pretty=<style>" a opção para a família de log dos comandos pode agora ser escrita como " --format=<style>".
    Além disso, --format=%formatstring é uma mão curta para --pretty=tformat:%formatstring.

  • "--oneline" é um sinónimo de "--pretty=oneline --abbrev-commit".

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

Também pode limitar a extensão do ecrã de Registo (número de commits):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(mostrar apenas os últimos 5 commits)


O que não me agrada na solução seleccionada é:

 git log --graph

Mostrou demasiada informação (quando só quero ver um resumo rápido):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk é óptimo, mas obriga-me a deixar a sessão da shell para outra janela, enquanto que a exibição do último n commits rapidamente é o suficiente.

 40
Author: VonC, 2011-11-15 11:57:57

Dê uma olhada em Gitkraken - uma interface multi-plataforma que mostra topologia de uma forma lúcida.

Topology

Aqui está um rápido tutorial de vídeo sobre algumas funcionalidades avançadas.

 36
Author: pylang, 2016-05-11 11:56:50

O Gitg é uma grande ferramenta para o Linux, semelhante ao Gitx para o OS X. Basta executar o 'gitg' na linha de comandos a partir de algum lugar dentro da estrutura da árvore do seu repositório (o mesmo com o gitx).

 29
Author: Jack Senechal, 2014-10-23 21:15:23

Eu achei "git-big-picture" bastante útil: https://github.com/esc/git-big-picture

Cria grafos 2D bonitos usando dot / graphviz em vez dos pontos de vista lineares, "unidimensionais" que gitk e amigos produzem. Com a opção-i ele mostra os pontos do branch e commits merge, mas deixa de fora tudo no meio.

 22
Author: Frank Osterfeld, 2013-04-25 20:20:23

Uma boa ferramenta baseada na web é ungit . Ele funciona em qualquer plataforma que o nó.js & git suporta. Há um vídeode como funciona para aqueles que acham esse tipo de coisas mais fáceis do que ler...

enter image description here

 21
Author: Sardathrion, 2013-11-04 11:13:41

Olha paraBranchMaster .

Escrevi-o para visualizar a estrutura complexa dos ramos, colapsando todos os commits entre eles numa única linha. Os números indicam o número de commits.

enter image description here

 16
Author: stroyer, 2015-03-22 07:36:49

Giggle desenha gráficos bonitos

 12
Author: Renat, 2011-10-18 08:47:24

O Git de tartaruga tem uma ferramenta chamada "grafo de revisão". Se estiver no Windows, é tão fácil como carregar com o botão direito no seu repo --> Git-tartaruga --> Gráfico de revisão.

 11
Author: Christian Adam, 2017-09-06 08:38:56

Uso os seguintes nomes falsos.

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
Tem mais informações no esquema de cores do que os nomes falsos que vi acima. Também parece ser bastante comum, então você pode ter uma chance de que exista no ambiente de outros ou ser capaz de mencioná-lo na conversa sem ter que explicá-lo. Com imagens e uma descrição completa aqui: http://blog.kfish.org/2010/04/git-lola.html
 10
Author: Lokist, 2012-10-24 15:00:00
Ninguém falou nisso? Não dobra ramos como" BranchMaster", mas... É rápido, corre no terminal.

Porque é tão rápido (+controlo do teclado) que você tem um grande UX, é quase como o meu "ls " para pastas que contêm repositórios git.

Https://jonas.github.io/tig/

Tem os atalhos habituais, / para procurar, etc.

The revision graph

(ps. é o terminal no fundo desta imagem, parece melhor hoje em dia, mas o meu computador recusa-se a tirar uma imagem, desculpa.

(pps. Eu uso gitkraken também e tem visualizações muito claras, mas é muito mais pesado do que tig)

 7
Author: wires, 2017-04-21 23:25:56

Tenho este git log pseudónimo em ~/.gitconfig para ver o histórico do Gráfico:

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

Com o nome falso em vigor, {[3] } mostrará algo como isto:

enter image description here

In Git 2.12+ Você pode até personalizar as cores das linhas do gráfico usando o log.graphColors opção de configuração.

Quanto ao formato dos logs, é semelhante ao --oneline, com a adição do nome do autor (respeitando .mailmap) e do autor relativo Data Note que a sintaxe %C(auto), que diz ao Git para usar as cores predefinidas para o hash de commit, etc. é suportado no Git >= 1.8.3.
 7
Author: Eugene Yarmash, 2017-08-17 07:35:54

Encontrei este post {[6] } que mostra uma forma concisa:

git log --oneline --abbrev-commit --all --graph --decorate --color

Normalmente crio um nome alternativo para o comando acima:

alias gg='git log --oneline --abbrev-commit --all --graph --decorate --color'

E basta usar gg.

 6
Author: Sadegh, 2014-09-16 10:02:14
O meu pseudónimo favorito, via .gitconfig, is:
graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
 6
Author: xero, 2016-09-01 18:05:45

Para os utilizadores do Mac, checkout (sem trocadilhos) a ferramenta de código livre GitUp: http://gitup.co/

Gosto da forma como os gráficos são apresentados, é mais claro do que algumas das outras ferramentas que vi.

O projecto está aqui: https://github.com/git-up/GitUp

GitUp screenshot

 6
Author: Edward T, 2017-10-31 00:03:20

O Gitx é também uma ferramenta de visualização fantástica se por acaso estiver no OS X.

 5
Author: kEND, 2009-12-03 17:59:55

Posto antigo, mas olha para isto.SmartGit. Lembra muito a visualização do ramo de tartaruga Hg e é gratuito para uso não comercial.

 5
Author: Frederik Struck-Schøning, 2012-10-16 09:23:15

Outro comando de Registo git. Este com colunas de largura fixa:

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
 5
Author: David, 2017-04-06 09:01:36

Para aqueles que usam o editor de texto VSCode , considere a Extensão de História do Git por D. Jayamanne:

enter image description here

 3
Author: pylang, 2018-06-05 23:42:47

Nas janelas existe uma ferramenta muito útil que pode usar: extensões git. É uma ferramenta gui e torna as operações git muito fáceis.

Também é de fonte aberta.

Http://gitextensions.github.io

 2
Author: loneshark99, 2015-12-28 00:36:14
Tentei, mas todas as minhas concentrações não foram mostradas. Por isso, em vez disso, limpe as linhas sem símbolos "\" e "/" nos cabeçalhos, mantendo sempre as linhas com "(" indicando ramos imediatamente após isso. Ao mostrar a história do branch eu estou em geral desinteressado em comentários de commit, assim que eu removê-los também. Acabo com o seguinte nome falso.
gbh () { 
    git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}
 1
Author: Isaac To, 2015-04-20 01:15:50

O site oficial do Git recrutou algumas ferramentas GUI específicas de terceiros. Bate aqui. git GUI Tools for Linux Platform

Eu usei gitg e GitKraken para a plataforma linux. Ambos são bons para entender a árvore de commit

 0
Author: rookie4evr, 2018-04-20 20:54:01
Podemos tornar isto mais complicado? Que tal simples? git log --all --decorate --oneline --graph (lembre-se de um cão = --All --Decorate --Oneline --Graph)
 0
Author: pixel, 2018-08-02 23:27:51