Visualizando topologia de ramos no git
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 ...
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
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
2¢: 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 lg2
parece isto:
E git lg3
parece-se com isto:
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.
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!
Gitk
um dia doloroso para mim ler.
Motive - me a escrever GitVersionTree.
"99.999% do meu tempo está a olhar para a história por git lg
e o 0, 001% é por git log
"
[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.
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.
Dê uma olhada em Gitkraken - uma interface multi-plataforma que mostra topologia de uma forma lúcida.
Aqui está um rápido tutorial de vídeo sobre algumas funcionalidades avançadas.
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).
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.
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...
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.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.
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
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.
Tem os atalhos habituais, /
para procurar, etc.
(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
)
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:
In Git 2.12+ Você pode até personalizar as cores das linhas do gráfico usando o log.graphColors
opção de configuração.
--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.
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
.
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"
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
O Gitx é também uma ferramenta de visualização fantástica se por acaso estiver no OS X.
Posto antigo, mas olha para isto.SmartGit
. Lembra muito a visualização do ramo de tartaruga Hg e é gratuito para uso não comercial.
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
Para aqueles que usam o editor de texto VSCode , considere a Extensão de História do Git por D. Jayamanne:
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.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/).*/)/'
}
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