Разница между 2-мя коммитами, кроме содержащихся в 3-м коммите

Есть ли способ получить meld + git отобразить изменения, произошедшие между 2-мя коммитами git, но исключить изменения, внесенные в 3-й коммит? Вариант использования состоит в том, чтобы увидеть, насколько текущая фиксация отличается от некоторой фиксации, выполненной до 3-стороннего слияния.

1 ответ

Решение

У меня есть хакерский способ сделать это.

Предупреждение: перед использованием нижеприведенного однострочного файла лучше зафиксируйте / сохраните все ваши незафиксированные изменения Этот единственный вкладыш пытается спрятать и восстановить ваши изменения. Но это все еще может привести к некоторому беспорядку (новым файлам) в репо или может содержать некоторую ошибку

Код ниже показывает разницу между FIRST_COMMIT а также SECOND_COMMIT за исключением изменений в других файлах, представленных другой веткой в MERGE_COMMIT, Вы должны установить переменные env FIRST_COMMIT, SECOND_COMMIT а также MERGE_COMMIT соответствующие значения.

FIRST_COMMIT=866dfa2a7
MERGE_COMMIT=94b195989
SECOND_COMMIT=0fc856fd9

git stash ; \
git checkout $FIRST_COMMIT ; \
git ls  $MERGE_COMMIT..$SECOND_COMMIT | sort | \
uniq | \
xargs -L 1 git checkout $SECOND_COMMIT -- ; \
git difftool -d $FIRST_COMMIT ; \
git stash && git stash drop ; \
git stash apply

Что делает этот однострочный:

  • помещает локальные незафиксированные изменения в git stash
  • проверяет состояние кода в FIRST_COMMIT
  • принимает все файлы, измененные в MERGE_COMMIT а также SECOND_COMMIT и все ревизии между ними
  • каждый файл из предыдущего шага сбрасывается в его состояние во время SECOND_COMMIT
  • показывает diff, используя diff инструмент, который вы настроили для git. Разница будет между FIRST_COMMIT а также SECOND_COMMIT за исключением изменений в других файлах, представленных другой веткой в MERGE_COMMIT, Предыдущее предложение означает, что если какой-то файл был изменен как в SECOND_COMMIT И в MERGE_COMMITвсе изменения будут присутствовать в diff. Трудно избежать этого.
  • После того, как вы выйдете из утилиты diff, git удалит временные изменения и проверит ветку, над которой вы работали.
  • После этого будут применены изменения из git stash.

В зависимости от вашего предпочтительного рабочего процесса git, вы можете решить удалить вызовы git stash из единственной строки выше

Другие вопросы по тегам