Provavelmente, eu sou sobre onde o OP estava quando isso começou, procurando algo simples que me permita usar o git difftool com o vimdiff para revisar as alterações nos arquivos no meu repositório a partir de um commit específico. Eu não estava muito feliz com as respostas que estava encontrando, então juntei esse script git inc remental rep orter (gitincrep) juntos e isso tem sido útil para mim:
#!/usr/bin/env bash
STARTWITH="${1:-}"
shift 1
DFILES=( "$@" )
RunDiff()
{
GIT1=$1
GIT2=$2
shift 2
if [ "$(git diff $GIT1 $GIT2 "$@")" ]
then
git log ${GIT1}..${GIT2}
git difftool --tool=vimdiff $GIT1 $GIT2 "$@"
fi
}
OLDVERS=""
RUNDIFF=""
for NEWVERS in $(git log --format=format:%h --reverse)
do
if [ "$RUNDIFF" ]
then
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
elif [ "$OLDVERS" ]
then
if [ "$NEWVERS" = "${STARTWITH:=${NEWVERS}}" ]
then
RUNDIFF=true
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
fi
fi
OLDVERS=$NEWVERS
done
Chamado sem argumentos, isso começará no início do histórico do repositório, caso contrário, começará com o hash de confirmação abreviado que você fornecer e prosseguirá para o presente - você pode pressionar Ctrl-C a qualquer momento para sair. Qualquer argumento após o primeiro limitará os relatórios de diferença para incluir apenas os arquivos listados entre eles (que eu acho que é o que o OP queria, e eu recomendaria para todos os projetos, exceto pequenos). Se você estiver verificando alterações em arquivos específicos e quiser começar desde o início, precisará fornecer uma sequência vazia para arg1. Se você não é um usuário do vim, pode substituir o vimdiff por sua ferramenta de diff favorita.
O comportamento é gerar os comentários de confirmação quando alterações relevantes são encontradas e começar a oferecer execuções vimdiff para cada arquivo alterado (esse é o comportamento do git difftool , mas funciona aqui).
Essa abordagem provavelmente é bastante ingênua, mas, analisando muitas das soluções aqui e em um post relacionado, muitas envolveram a instalação de novas ferramentas em um sistema onde eu não tenho acesso de administrador, com interfaces que tinham sua própria curva de aprendizado. O script acima fez o que eu queria sem lidar com nada disso. Analisarei as muitas sugestões excelentes aqui quando precisar de algo mais sofisticado - mas acho que isso responde diretamente ao OP.