Разница между 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 из единственной строки выше