I'estou brincando com o git em isolamento na minha própria máquina, e eu acho difícil manter um modelo mental de todos os meus ramos e compromissos. Eu sei que posso fazer um git log
para ver o histórico de commits de onde estou, mas existe uma maneira de ver toda a topografia dos ramos, algo como esses mapas ascii que parecem ser usados em todos os lugares para explicar os ramos?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Parece que alguém vindo junto e tentando pegar meu repositório teria dificuldade em entender exatamente o que estava acontecendo.
Acho que I'm influenciado pelo AccuRev's navegador de streaming...
git log --graph
ou gitk
. (Ambos também aceitam `--tudo', que mostrará todos os ramos em vez de apenas o atual).
Editar:
Para nomes de ramos e uma vista compacta, tente: git log --graph --decorate --oneline
Eu costumo usar
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
Com cores (se a sua concha for 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ê poderia apenas usar git log --format=oneline
, mas isso ligará mensagens de commit a números, o que parece menos bonito IMHO).
Para fazer um atalho para este comando, você pode querer editar seu arquivo ~/.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"
Entretanto, como Sodel the Vociferous observa nos comentários, é difícil memorizar um comando de formatação tão longo. Normalmente, it'não é um problema, pois você pode colocá-lo no arquivo ~/.gitconfig
. Entretanto, se você às vezes tem que entrar em uma máquina remota onde você pode't modificar o arquivo de configuração, você poderia usar uma versão mais simples, mas mais rápida para digitar:
git log --graph --oneline
Eu gosto, com git log
, de fazer:
git log --graph --oneline --branches
(também com -- tudo, para ver as filiais remotas também)
Funciona com lançamentos recentes da Git: introduzido desde **1.6.3*** (Qui, 7 de Maio de 2009)
- "
--pretty=<style>
" opção para a família de comandos de log agora pode ser escrita como "--format=<style>
".
Além disso,--formato=%formatstring
é um curto-tempo para--pretty=tformat:%formatstring
.
- "
--oneline
" é 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
Você também pode limitar o alcance da exibição do log (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 eu não gosto na actual solução seleccionada é:
git log --graph
Ele exibia muita informação (quando eu quero apenas olhar para 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
|
O gitk
é ótimo, mas me obriga a deixar a sessão de shell para outra janela, enquanto que exibir os últimos n commits rapidamente é o suficiente.