Aqui está um script Perl que imprime os comandos diff do Git para um determinado arquivo, conforme encontrado em um comando de log do Git.
Por exemplo
git log pom.xml | perl gldiff.pl 3 pom.xml
Rendimentos:
git diff 5cc287:pom.xml e8e420:pom.xml
git diff 3aa914:pom.xml 7476e1:pom.xml
git diff 422bfd:pom.xml f92ad8:pom.xml
que poderia ser recortado e colado em uma sessão de janela de shell ou canalizado para /bin/sh
.
Notas:
- o número (3 neste caso) especifica quantas linhas imprimir
- o arquivo (pom.xml neste caso) deve concordar nos dois lugares (você pode envolvê-lo em uma função shell para fornecer o mesmo arquivo nos dois lugares) ou colocá-lo em um diretório binário como um script shell
Código:
# gldiff.pl
use strict;
my $max = shift;
my $file = shift;
die "not a number" unless $max =~ m/\d+/;
die "not a file" unless -f $file;
my $count;
my @lines;
while (<>) {
chomp;
next unless s/^commit\s+(.*)//;
my $commit = $1;
push @lines, sprintf "%s:%s", substr($commit,0,6),$file;
if (@lines == 2) {
printf "git diff %s %s\n", @lines;
@lines = ();
}
last if ++$count >= $max *2;
}
..
não é realmente necessário, embora funcione com ele (exceto em versões bastante antigas, talvez). Você também pode usargit log
ougitk
encontrar SHA1s para usar, caso os dois commits estejam muito distantes.gitk
também possui um "diff selected -> this" e "diff this -> selected" em seu menu de contexto.