Não foi possível mostrar uma árvore Git no terminal

439

O artigo antigo de Killswitchcollective.com, 30 de junho de 2009 , possui as seguintes entradas e saídas

git co master
git merge [your_branch]
git push

upstream    A-B-C-D-E            A-B-C-D-E-F-G
                 \        ---->               \
your branch       C-D-E                        G

Estou interessado em saber como você obtém a visão de árvore dos commits no seu terminal sem usar o Gitk ou o Gitx no OS / X.

Como você pode obter a visão de árvore dos commits no terminal?

Léo Léopold Hertz 준영
fonte
2
Não é importante para a pergunta, mas o artigo em questão não está mais disponível. A cópia em cache está disponível através da Internet Archive: web.archive.org/web/20110831142839/http://...
Alan De Smet

Respostas:

795

Como você pode obter a visão de árvore dos commits no terminal?

git log --graph --oneline --all

é um bom começo.

Você pode receber algumas cartas estranhas. São códigos ASCII para cores e estrutura. Para resolver esse problema, adicione o seguinte ao seu .bashrc:

export LESS="-R"

para que você não precise usar o filtro ASCII da Tig

git log --graph --pretty=oneline --abbrev-commit | tig   // Masi needed this 

O gráfico baseado em texto do artigo do Git-ready contém outras opções:

git log --graph --pretty=oneline --abbrev-commit

gráfico de log git

Em relação ao artigo que você mencionou, eu responderia com a resposta de Pod : produção artesanal ad-hoc.


Jakub Narębski menciona nos comentários tig , uma interface em modo de texto baseada em ncurses para o git. Veja os lançamentos deles .
Ele adicionou uma --graphopção em 2007.

VonC
fonte
1
Acabei de o testar no meu repositório. Funciona, mas estou no Windows com o MSysGit1.6.3.
VonC 30/06/09
files.getdropbox.com está bloqueado aqui no trabalho :( Verei sua foto em cerca de uma hora, hora de chegar em casa.
VonC 30/09/09
@ Vonc: Agora eu digitei dois para o primeiro comando. Tenho uma visão semelhante à da imagem para o segundo comando.
Léo Léopold Hertz · 30/06/09
9
Também existe uma interface em modo de texto 'tig' para o git (usando ncurses), que exibia o histórico gráfico no terminal antes de haver a opção '--graph' no git-log.
Jakub Narębski 30/06/09
2
Eu também acho --decorateindispensável nesse tipo de exibição - mostra nomes de referência (filiais, remotas e locais) ao lado do nome abreviado de confirmação.
precisa
312

Uma solução é criar um Alias ​​no seu .gitconfige chamá-lo facilmente:

[alias]
    tree = log --graph --decorate --pretty=oneline --abbrev-commit

E quando você ligar da próxima vez, usará:

git tree

Para colocá-lo no seu ~ / .gitconfig sem precisar editá-lo, você pode:

git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"  

(Se você não usar o --global, ele será colocado no .git / config do seu repositório atual.)

Marouane Gazanayi
fonte
1
Como isso não é um alias padrão? Eu acho que faria CLI do Git um pouco menos irritante para uso e não podemos ter isso ...
Timmmm
123
git log --oneline --decorate --all --graph

Uma árvore visual com nomes de ramos incluídos.

Use isso para adicioná-lo como um alias

git config --global alias.tree "log --oneline --decorate --all --graph"

Você chama com

git tree

Árvore Git

Sebastian Patten
fonte
2
Muito bom esse. Eu o uso em combinação com less -So descrito aqui , para impedir que linhas quebradas ofuscem a árvore.
djvg
60

tig

Se você deseja uma árvore interativa , pode usar tig. Pode ser instalado brewno OSX e apt-getno Linux.

brew install tig
tig

Isto é o que você recebe:

insira a descrição da imagem aqui

Mohsen
fonte
Você consegue uma árvore como a da resposta de Tig do VonC atualmente? Usamos o Tig na resposta do VonC apenas como filtro Ascii.
Léo Léopold Hertz,
4

Manter seus comandos curtos os tornará mais fáceis de lembrar:

git log --graph --oneline
JSON C11
fonte
1

Eu sugiro que alguém anote o comando completo

git log --all --decorate --oneline --graph

em vez de criar um alias.

É bom colocar os comandos em sua cabeça, para que você saiba de cor, ou seja, não dependa de pseudônimos quando trocar de máquina.

Saxofonista
fonte
2
É verdade git log --all --decorate --oneline --graph, depois de o mnemônico git log a dog;)
VonC
@VonC O resultado final é o mesmo. De qualquer forma, eu concordo com você. Obrigado pelo feedback.
Saxofonista
Sim, é isso que o smiley ;)no final do meu comentário anterior estava tentando (imperfeitamente) transmitir: você pode usar essas opções na ordem que desejar. Acabei de descobrir "log um cão" engraçado :)
VonC
1
Ou você poderia scp ~/.bashrc root@remote:~/e seus apelidos se moveriam rapidamente.
Adminy 15/05/19