Вопрос или проблема
История коммитов выглядит следующим образом
- aaa оригинальный код
- bbb изменение
- ccc нерелевантное изменение 1
- ddd отменённое bbb по какой-то причине
- eee нерелевантное изменение 2
Теперь автор кода хочет объединить PR с изменением fff в нем. Автор утверждает, что этот PR просто отменяет ddd – значит, он должен точно вернуть bbb.
Как рецензент PR может проверить, что bbb и fff – это идентичные коммиты (другими словами, не было сделано никаких дальнейших правок, требующих повторной проверки)? Какие команды git мы можем использовать, чтобы проверить это утверждение?
Я нашел этот вопрос Есть ли способ проверить, равны ли содержанием два различных git-коммита?, но эти ответы работают только в том случае, если коммиты находятся в разных ветках или если у вас есть дополнительные не-git инструменты в системе. Мне нужен ответ, который работает на MS Windows без дополнительных инструментов, таких как diff, sed, awk и т.д.
Ответ или решение
Для того чтобы определить, идентичны ли коммиты bbb
и fff
, нужно выяснить, содержат ли они одни и те же изменения, несмотря на то, что у них разные хеши (идентификаторы). Git позволяет проверять содержимое коммитов с помощью нескольких удобных команд, которые можно использовать на Windows без необходимости установки дополнительных инструментов.
Шаг 1: Получите хеши коммитов
Сначала вам нужно узнать хеши коммитов bbb
и fff
. Для этого вы можете воспользоваться командой:
git log --oneline
Эта команда покажет список коммитов в однострочном формате, где вы сможете идентифицировать необходимые коммиты и их хеши.
Шаг 2: Сравните содержимое коммитов
Чтобы сравнить содержимое двух коммитов, используйте следующую команду:
git diff <hash_bbb> <hash_fff>
Замените <hash_bbb>
и <hash_fff>
на соответствующие хеши ваших коммитов. Эта команда покажет различия между содержимым двух коммитов. Если вывод команды пуст, это указывает на то, что коммиты bbb
и fff
идентичны.
Шаг 3: Дополнительная проверка
Если вы хотите убедиться, что изменения были выполнены не только в одном файле, но и для всех затронутых файлов, можно использовать следующую команду:
git show <hash_bbb> > before.txt
git show <hash_fff> > after.txt
Эти команды создадут два файла: before.txt
и after.txt
, содержащие содержимое соответствующих коммитов. После этого вы сможете произвести сравнение с помощью:
fc before.txt after.txt
Команда fc
(file compare) позволяет сравнить два файла на Windows. Если нет различий, то подтверждается, что коммиты идентичны.
Заключение
Используя вышеуказанные команды, PR-ревьювер может убедиться, что изменения, внесённые в коммите fff
, полностью идентичны изменениям, внесённым в коммит bbb
. Это подтверждает, что никакие дополнительные правки не были сделаны и нет необходимости в повторной проверке кода. Таким образом, вы сможете эффективно и с минимальными усилиями выполнить необходимую проверку.