Ver o histórico de alterações de um arquivo usando Git versionamento
Pergunta
Como posso ver o histórico de alterações de um arquivo individual em Git, detalhes completos com o que mudou?
Eu tenho tanto quanto:
git log -- [filename]
que mostra-me a história do arquivo de cometer, mas como faço para chegar ao conteúdo de cada uma das mudanças de arquivo?
Eu estou tentando fazer a transição de MS SourceSafe e que costumava ser um right-click
simples ? show history
.
Solução
Por isso eu usaria:
gitk [filename]
ou seguir filename passado renomeações
gitk --follow [filename]
Outras dicas
Você pode usar
git log -p filename
para deixar git gerar os patches para cada entrada de log.
Veja
git help log
para mais opções - ele pode realmente fazer um monte de coisas agradáveis ??:) Para obter apenas o diff para um commit específico você pode
git show HEAD
ou qualquer outra revisão pelo identificador. Ou utilização
gitk
para navegar as mudanças visuais.
git log --follow -p -- path-to-file
Isto irá mostrar o toda história do arquivo (incluindo história além renomeações e com diffs para cada alteração).
Em outras palavras, se o bar
arquivo chamado foi uma vez chamado foo
, então git log -p bar
(sem a opção --follow
) só irá mostrar a história do arquivo até o ponto onde ele foi renomeado - não vai mostrar a história do arquivo quando era conhecido como foo
. Usando git log --follow -p bar
irá mostrar toda a história do arquivo, incluindo quaisquer alterações para o arquivo quando ele era conhecido como foo
. A opção -p
garante que diffs estão incluídas para cada alteração.
Se você prefere ficar com base em texto, você pode querer usar tig .
Instalação rápida:
- apt-get :
# apt-get install tig
- Homebrew (OS X) :
$ brew install tig
Use-o para ver a história em um único arquivo: tig [filename]
Ou procure história repo detalhada: tig
Semelhante ao gitk
mas baseado em texto. Suporta cores em! Terminais
git whatchanged -p filename
também é equivalente a < a href = "http://git-scm.com/docs/git-log" rel = "noreferrer"> git log -p filename
neste caso.
Você também pode ver quando uma linha específica de código dentro de um arquivo foi alterado com git blame filename
. Isto irá imprimir uma curta cometer id, o autor, timestamp, e completa linha de código para cada linha no arquivo.
Isto é muito útil depois de ter encontrado um bug e você quer saber quando foi introduzido (ou que a culpa era).
SourceTree usuários
Se você usar SourceTree para visualizar seu repositório (é gratuito e muito bom), você pode botão direito do mouse um arquivo e selecione log selecionado
O display (abaixo) é muito mais amigável do que gitk ea maioria das outras opções listadas. Infelizmente (neste momento) não há nenhuma maneira fácil de lançar este ponto de vista a partir da linha de comando -. CLI do SourceTree atualmente só abre repos
Para mostrar o que revisão e autor modificada pela última vez a cada linha de um arquivo:
git blame filename
ou se você quiser usar o poderoso GUI culpa:
git gui blame filename
Resumo de outras respostas depois de ler através deles e jogar um pouco:
O comando habitual linha de comando seria
git log --follow --all -p dir/file.c
Mas você também pode usar gitk (GUI) ou tig (texto-ui) para dar muito mais legível maneiras de olhar para ele.
gitk --follow --all -p dir/file.c
tig --follow --all -p dir/file.c
De acordo com Debian / Ubuntu, o comando de instalação para essas ferramentas encantadoras é o esperado:
sudo apt-get install gitk tig
E eu estou usando atualmente:
alias gdf='gitk --follow --all -p'
para que eu possa apenas digite gdf dir
para obter uma história focalizada de tudo em dir
subdiretório.
Adicione esta alias para o seu .gitconfig:
[alias]
lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative
E usar o comando como este:
> git lg
> git lg -- filename
O resultado será quase exatamente o mesmo que a saída gitk. Desfrute.
Ultimamente eu descobri tig
e achei muito útil. Há alguns casos eu desejaria que faz A ou B, mas na maioria das vezes é bastante puro.
Para o seu caso, tig <filename>
pode ser o que você está procurando.
Eu escrevi git-reprodução para esta finalidade exata ??p>
pip install git-playback
git playback [filename]
Isto tem o benefício de ambos exibindo os resultados na linha de comando (como git log -p
) ao mesmo tempo, permitindo-lhe passar por cada commit usando as setas do teclado (como gitk
).
Se você quiser ver todo o histórico de um arquivo, incluindo em todos os outros ramos usar:
gitk --all <filename>
Com o excelente Git extensões , você vai para um ponto na história onde o arquivo ainda existia (se ele tiver sido excluído, caso contrário, basta ir para a cabeça), alterne para a guia File tree
, clique com o botão direito no arquivo e escolha File history
.
Por padrão, segue-se o arquivo através das renomeações, e na guia Blame
permite ver o nome em uma dada revisão.
Ele tem algumas armadilhas menores, como mostrando fatal: Not a valid object name
na guia View
ao clicar sobre a revisão eliminação, mas eu posso viver com isso. : -)
Se você estiver usando a GUI git (no Windows) no menu Repositório você pode usar "História do mestre Visualize". Realce um commit no painel superior e um arquivo no canto inferior direito e você verá o diff para que cometem no canto inferior esquerdo.
- In the menu enable to display unchanged files: View / Show unchanged files
- Right click the file and select 'Log' or press 'Ctrl-L'
You can also try this which lists the commits that has changed a specific part of a file (Implemented in Git 1.8.4).
Result returned would be the list of commits that modified this particular part. Command :
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
where upperLimit is the start_line_number and lowerLimit is the ending_line_number of the file.
More details at https://www.techpurohit.com/list-some-useful-git-commands
The answer I was looking for that wasn't in this thread is to see changes in files that I'd staged for commit. i.e.
git diff --cached
If you use TortoiseGit you should be able to right click on the file and do TortoiseGit --> Show Log
. In the window that pops up, make sure:
'
Show Whole Project
' option is not checked.'
All Branches
' option is checked.
git diff -U <filename>
give you a unified diff.
It should be colored on red and green. If it's not, run: git config color.ui auto
first.
If you are using eclipse with the git plugin, it has an excellent comparison view with history. Right click the file and select "compare with"=> "history"
You can use vscode with GitLens, it's a very powerful tool.
After installed GitLens, go to GitLens tab, select FILE HISTORY
and you can browse it.