Инструмент Git diff для каждой фиксации?

Я хотел бы запустить git difftool HEAD~3.. path/to/file и git открыть diffftool для каждого из этих трех коммитов, чтобы я мог видеть бок о бок представление каждой фиксации.

Как я могу получить git-diffftool, чтобы это сделать?

Ответ 1

Это выполнит то, что вы описываете:

git difftool HEAD~3 HEAD~2 path/to/file
git difftool HEAD~2 HEAD~1 path/to/file
git difftool HEAD~1 HEAD path/to/file

Хотите автоматизировать этот процесс? Всегда ли это три коммиты? Вы хотите трехстороннее слияние?

Обновить:

Если ответы да-да-нет, решение будет:

for i in {3..1}; do
  git difftool HEAD~$i HEAD~$((i-1)) path/to/file
done

Обновить:

Если ответы да-нет-да, это, по сути, то, что здесь спрашивает @ruffin. Смотрите мой ответ.

Ответ 2

Или вы можете просто запустить git log -p - это почти то же самое, что вы хотите

Ответ 3

ОБНОВИТЬ:

Matthieu Moy предложил гораздо лучший вариант:

for rev in $(git rev-list <committish>.. ); do
    git difftool ${rev} ${rev}~1;
    done

OLD-версия ответа:

Я бы сказал, что вы делаете что-то вроде:

git rev-list <commitish>.. | wc -l

или

git log --oneline <commitish>.. | wc -l

Это будет подсчитывать, сколько изменений у вас есть между вашим <commitish> и HEAD.

Затем, используя этот номер, вы можете автоматически пропустить через фиксации, чтобы увидеть различия

c='git log --online <commitish>.. | wc -l'

while ! ${c} eq 0 ; do

git difftool HEAD~${c} HEAD~${($c-1)}
c=${c}-1
done

Ответ 4

for i in 1 2 3
do
  ((j=${i}-1))
  git difftool HEAD~${i}..HEAD~${j} path/to/file &
done

Ответ 5

Несколько иной подход:

1) Выполните интерактивную перезагрузку

git rebase -i <commitish>

2) Отметьте все свои фиксации для редактирования

3) Для каждого запуска фиксации

git difftool HEAD~1

4) Перейдите к следующему фиксации и повторите шаг 3

git rebase --continue

Дополнительным преимуществом является то, что если вы видите проблему в обзоре, вы уже проверили фиксацию, которую хотите исправить.