Quero encontrar a confirmação mais recente que modificou um arquivo de origem.
Posso usar git blame
para ver todas as datas de confirmações por cada linha, mas é difícil ver exatamente qual confirmação foi a última a tocar no arquivo.
Como posso encontrar o último commit que tocou em um determinado arquivo no meu repositório git?
--all
opçãoSe você apenas deseja encontrar a confirmação mais recente, não deseja
git-log
,git-rev-list
que lista os objetos de confirmação que alteram esse arquivo, nesse caminho de confirmação, começando pelo mais recente (cronologicamente). Simplificando:git rev-list -1 <commit> <filename>
No
git-rev-list
seu caso, você apenas fornece:Isso apenas retorna o ID de confirmação mais recente no ramo atual para alterar esse arquivo, por exemplo:
215095e2e338525be0baeeebdf66bfbb304e7270
Para um exemplo mais complexo, você pode usar nomes de tags e até referências remotas e incluir nomes de caminhos relativos com caracteres curinga, por exemplo:
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
... O que lhe diria qual foi a alteração mais recente na correspondência curinga no histórico dessa ramificação. As opções para rev-list são extremas, é um dos comandos de encanamento mais importantes, para que você possa incluir ou excluir praticamente qualquer critério que possa imaginar.
Obviamente, consulte a página de manual do git-rev-list (1) .
fonte
git-log
é inferior.git-log
é porcelana,git-rev-list
é encanamento.Se você deseja obter apenas o hash da confirmação mais recente para modificar um conjunto específico de arquivos (e deseja evitar
awk
), você pode usar:Isso pode ser útil para obter o hash de confirmação para uso posterior com
git describe
.Por exemplo (caso seja útil para qualquer pessoa)…
Criei um ID de versão atual considerando o commit mais recente para alterar qualquer arquivo de origem (supondo que você marque versões com tags como
mycode-1.2.1
):Isso produz IDs como:
mycode-1.2.1
- quando o estado atual dos arquivos de origem corresponder a uma versão marcadamycode-1.2.1-g3k7s2
- quando o estado atual dos arquivos de origem corresponder à confirmação após uma versão marcadamycode-1.2.1-g3k7s2-mod
- quando o estado atual dos arquivos de origem foi modificado desde a última confirmação após uma versão marcadamycode-unknown
- quando ainda não houver uma tag de versão criadafonte
$VN
parece algum tipo de pesadelo morto-vivo SVNNão tenho certeza se é isso que você deseja, mas se você fizer um
git log <thefile>
para obter os commits que alteraram esse arquivo. Você pode escolher o mais alto. Deve ser o que você está procurando.fonte
git log -n1 -- <thefile>
(ou canalizar a saída parahead -1
se você quer desperdiçar recursos), você não tem que escolher manualmente a linha superior (ver Jo Liss resposta )-n
e usar-1
diretamente.Para obter apenas o árbitro em uma linha, tente:
fonte
Depois de ter o ID SHA do commit que você deseja usar
git log FILENAME
, você poderá fazergit show SHA_ID_HERE
para ver o que fez para esse commit específico. Você nem precisa digitar o ID inteiro; os 6 primeiros caracteres devem ser suficientes.fonte
git show $(git log -1 --pretty="%H" -- FILENAME)