Histórico ou log de comandos executados no Git

96

Existe uma maneira de controlar os comandos que usei no Git no Windows? Desejo visualizar todos os comandos que apliquei em meu repositório.

Quero poder voltar ao histórico de comandos e descobrir o comando que causou o problema, caso tenha ocorrido.

Ver o histórico de commits seria uma coisa, mas para manter um histórico de outras ações, como criar um branch ou adicionar um remoto, elas são rastreadas?

nilMoBile
fonte
3
Isso é um pouco um aparte, mas se você olhar .git/logs, verá o histórico do commit para o qual cada branch apontou.
Nayuki de
1
@Nayuki Como o pushing não muda o estado de uma filial local, reflogaparentemente ela não armazena push, então olhar .git/logs/refs/remotes/*/*é a única maneira de ver seu pushhistórico.
Kyle Strand

Respostas:

-8

git mostrará mudanças em commits que afetam o índice, como git rm. Ele não armazena um log de todos os comandos git que você executa.

No entanto, um grande número de comandos git afeta o índice de alguma forma, como criar um novo branch. Essas mudanças irão aparecer no histórico de commits, que você pode ver com git log.

No entanto, existem mudanças destrutivas que o git não pode rastrear, como git reset.

Portanto, para responder à sua pergunta, git não armazena um histórico absoluto de gitcomandos que você executou em um repositório. No entanto, muitas vezes é possível interpolar qual comando você executou por meio do histórico de commits.

Alex
fonte
2
Na verdade, como uma resposta abaixo menciona com razão, sim. "histórico" mostra a lista de comandos executados (desde a instalação).
Umesh .A Bhat
2
O shell armazena o histórico, mas o git não, certo?
Alex de
3
@UmeshABhat git historyseria útil, por exemplo, para ver quais comandos foram executados em um clone específico .
Kyle Strand
5
git reflogé o que você quer. Veja a resposta abaixo.
Chéyo
3
@ cp.engr: O OP pede o histórico de comandos git, não git commits. Essa resposta sugere inferir os comandos dos commits do git, o que é um trabalho muito difícil e nem sempre possível. git reflogrealmente mostra os próprios comandos. Além disso, BTW, o shell é apenas uma maneira um pouco mais direta de inferir os comandos git, mas um repo git pode ser tocado por vários shells. É melhor perguntar ao git quais comandos foram usados.
combinatorista
182

Você pode ver o histórico com git-reflog ( exemplo aqui ):

git reflog
Jweyrich
fonte
18
@PauAI, embora git reflog mostre todas as posições que seu HEAD está seguindo, não mostrará realmente todos os comandos git. Os comandos do Git que não movem a cabeça (por exemplo git branch -D my_precious_branch) não apareceriam lá.
Yonatan
@Yonatan, você não poderia fazer isso git reflog --all?
combinatorista
2
@combinatorist tente adicionar um controle remoto (como o OP deu, por exemplo): git remote add foo bar. ele não aparecerá git reflog --all, pois não modifica o ponteiro HEAD.
Yonatan,
git reflognão me mostra comandos como git statusaso., com ou sem --allparâmetro.
Lorenz
62

Um log de seus comandos pode estar disponível no histórico do shell.

history

Se ver a lista de comandos executados não for para você, exporte a lista para um arquivo.

history > path/to/file

Você pode restringir o dump exportado para mostrar apenas comandos com "git" neles, canalizando-o com grep

history | grep "git " > path/to/file

O histórico pode conter linhas formatadas como tal

518  git status -s
519  git commit -am "injects sriracha to all toppings, as required"

Usando o número, você pode reexecutar o comando com um ponto de exclamação

$ !518
git status -s
aleatória
fonte
8

Se você estiver usando CentOS ou outro tipo de Linux, basta fazer Ctrl+ Rno prompt e digitar git.

Se você continuar pressionando Ctrl+, Risso fará uma pesquisa reversa em seu histórico para comandos que começam comgit

crmpicco
fonte
7

Digite historyseu terminal. Não é tecnicamente git, mas acho que é o que você quer.

ScottyBlades
fonte
6

Se você usa o Windows PowerShell, pode digitar "git" e pressionar F8. Continue a pressionar F8 para percorrer todos os seus comandos git.

Ou, se você usar o cygwin, poderá fazer a mesma coisa com ^ R.

brincando
fonte
Em uma sessão normal do Windows, você pode usar a tecla F7 para obter uma pequena janela que lhe dá uma lista de todos os comandos inseridos naquela sessão
milso
0

Descobri que na minha versão do git bash "2.24.0.windows.2" na minha pasta "home" nos usuários do Windows, haverá um arquivo chamado ".bash-history" sem extensão de arquivo nessa pasta. Ele só é criado depois que você sai do bash.

Este é meu fluxo de trabalho:

  1. antes de sair do bash digite "history >> history.txt" [ENTER]
  2. saia do prompt bash
  3. segure Win + R para abrir a caixa de comando Executar
  4. entrar shell: perfil
  5. abra "history.txt" para confirmar que meu texto foi adicionado
  6. Em uma nova linha, pressione [F5] para inserir um carimbo de data / hora
  7. salvar e fechar o arquivo de texto do histórico
  8. Exclua o arquivo ".bash-history" para que a próxima sessão crie um novo histórico

Se você realmente quiser pontos, acho que você poderia fazer um arquivo em lote para fazer tudo isso, mas isso é bom o suficiente para mim. Espero que ajude alguém.

user65795
fonte