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.

Foi útil?

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

enter descrição da imagem aqui

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

enter descrição da imagem aqui

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.

http://jonas.nitro.dk/tig/

Eu escrevi git-reprodução para esta finalidade exata

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).

Ou:

gitx -- <path/to/filename>

Se você estiver usando gitx

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.

SmartGit:

  1. In the menu enable to display unchanged files: View / Show unchanged files
  2. 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.

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top