Подтвердить что ты не робот

Git: показать все файлы, измененные между двумя коммитами

A рифф на git: показать все измененные файлы между двумя коммитами: я хочу список всех файлов, которые были изменены между двумя коммитами, даже если они теперь одинаковы (т.е. изменены, а затем изменены обратно).

4b9b3361

Ответ 1

Это лучшее, что я мог придумать:

git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq

Замените HEAD ^^ и HEAD на коммиты, которые вы хотите сравнить.

Моя попытка использует git log с --name-only, чтобы перечислить все файлы каждой фиксации между указанными. --pretty=oneline делает часть выше списка файлов состоящей только из сообщения SHA и заголовка фиксации. --full-index делает SHA полным 40 символов. grep отфильтровывает все, что похоже на SHA, а затем пробел. Если у вас есть файлы, начинающиеся с SHA, а затем пробел, результат должен быть точным.

Ответ 2

Я думаю, что эта команда - ваш ответ:

git diff --stat abc123 xyz123  #where abc123 and xyz123 are SHA1 hashes of commit objects

Прямо из сообщества git

Если вы не хотите видеть весь патч, вы можете добавить параметр "-stat", который ограничит вывод на файлы, которые были изменены вместе с небольшим текстовым графиком, изображающим, сколько строк было изменено в каждом файл.

Ответ 3

Если вы хотите просто увидеть имена файлов, где commit b находится в хронологическом порядке после a:

git diff <a commit sha1>...<b commit sha2> --name-only # b is after a in time

Если вы хотите увидеть все имена файлов и что было изменено с commit a на commit b, отбросьте последний аргумент.

git diff <a commit sha1>...<b commit sha2> # shows file names and what changed in each file

Примером <commit sha1> является идентификатор фиксации, такой как 675ee6860d2c273bcc6c6a0536634a107e2a3d9f. Как правило, первые 8-10 цифр будут работать в большинстве проектов, но может потребоваться больше, если у проекта есть куча коммитов. Обычно я использую вывод id из git log --oneline.

Когда вы получаете разницу в... b и b позже, чем вовремя, легко увидеть, что было изменено в каждом файле в хронологическом порядке.

Ответ 4

Это похоже на igorw, но он избегает удаления SHA через grep:

git log --pretty='format:' --name-only HEAD^^..HEAD | sort -u

Если вы также хотите посмотреть, как файлы были изменены, замените --name-only на --name-status.

Ответ 5

Я бы использовал; взяв первые 8 хэшей фиксации. Если вы хотите, чтобы вы могли подключиться к файлу в соответствии с ниже:

git log 12345678..87654321 > C:\GitChanges.txt