É possível ver quem editou uma linha específica antes da confirmação relatada por git blame
, como um histórico de confirmações para uma determinada linha?
Por exemplo, eu executo o seguinte (no excelente uncrustify
projeto):
$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"
Como posso descobrir quem editou essa linha antes de confirmar fe25b6d
? E quem editou antes desse commit?
-w
opção Há também-M
para se mudou código / copiadoRespostas:
Você pode especificar uma revisão para a culpa do git olhar para trás a partir de (em vez do padrão de
HEAD
);fe25b6d^
é o pai defe25b6d
.fonte
--
é comumente usado como um separador nos argumentos da linha de comando - no caso do Git, geralmente é usado para separar coisas como commit hashes de uma lista de nomes de arquivos.Você pode usar git log -L para visualizar a evolução de um intervalo de linhas.
Por exemplo :
significa "rastrear a evolução das linhas 15 a 23 no arquivo nomeado filename.txt".
fonte
A resposta de Amber está correta, mas achei incerto; A sintaxe é:
Nota:
--
é usado para separar o tree-ish sha1 dos caminhos de arquivo relativos. 1 1Por exemplo:
Crédito total para Amber por saber todas as coisas! :)
fonte
Você pode querer conferir:
Oferece uma boa exibição gráfica de alterações como "culpa do git", mas com links clicáveis por linha, para passar para confirmações anteriores. Passe o mouse sobre os links para obter um pop-up com detalhes de confirmação. Nem meus créditos ... encontrei aqui:
http://zsoltfabok.com/blog/2012/02/git-blame-line-history/
git gui
é uma interface gráfica Tcl / Tc para git. Sem nenhum outro parâmetro, ele inicia um aplicativo gráfico bastante simples, mas útil, para confirmar arquivos, blocos ou até linhas simples e outros comandos semelhantes, como alterar, reverter, empurrar ... Faz parte do conjunto de ações git. No Windows, está incluído no instalador. No debian - eu não conheço outros sistemas * nix - ele deve ser instalado separadamente:Dos documentos:
https://git-scm.com/docs/git-gui
fonte
this
: mas como vejo a versão anterior da linha e quando ela foi adicionada?Com base na resposta anterior, essa linha única do bash deve fornecer o que você está procurando. Ele exibe o histórico de culpa do git para uma linha específica de um arquivo específico, através das últimas 5 revisões:
Na saída deste comando, você pode ver o conteúdo da linha mudar, ou o número da linha exibido pode até mudar, para uma confirmação específica.
Isso geralmente indica que a linha foi adicionada pela primeira vez, após esse commit específico. Também pode indicar que a linha foi movida de outra parte do arquivo.
fonte
Há também
recursive-blame
. Pode ser instalado comfonte
Uma solução muito exclusiva para esse problema está usando o git log:
Como explicado por Andre aqui
fonte
git config --global alias.changes 'log -p -M --follow --stat --'
e então eu posso simplesmente digitargit changes path/to/your/file
Se você estiver usando o JetBrains Idea IDE (e derivados), poderá selecionar várias linhas, clique com o botão direito do mouse no menu de contexto e, em seguida, Git -> Mostrar histórico para seleção. Você verá a lista de confirmações que estavam afetando as linhas selecionadas:
fonte
A partir do Git 2.23, você pode usar a culpa do git --ignore-rev
Para o exemplo dado na pergunta, seria:
(no entanto, é uma pergunta complicada porque fe25b6d é a primeira revisão do arquivo!)
fonte
Com base na resposta de Will Shepard, sua saída incluirá linhas duplicadas para confirmações onde não houve alterações, para que você possa filtrá-las da seguinte maneira (usando esta resposta )
Observe que eu removi o argumento REVS e isso remonta ao commit raiz. Isso se deve à observação de Max Nanasy acima.
fonte
Com base na resposta de DavidN e desejo seguir o arquivo renomeado:
ref: exibe bem o histórico de renomeação de arquivos no log do git
fonte
Eu uso esse pequeno script bash para examinar um histórico de culpa.
Primeiro parâmetro: arquivo para olhar
Parâmetros subsequentes: passados para a culpa
Você pode fornecer parâmetros de culpa como -L 70, + 10, mas é melhor usar a pesquisa regex da culpa git porque os números de linha geralmente "mudam" ao longo do tempo.
fonte
Desenvolver a stangls 's resposta , eu coloquei esse script no meu PATH (mesmo no Windows) como git-bh:
Isso me permite procurar todos os commits em que uma palavra estava envolvida:
Roteiro:
fonte