git: показать все файлы, измененные между двумя коммитами - PullRequest
55 голосов
/ 30 июня 2010

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

Ответы [ 5 ]

65 голосов
/ 30 июня 2010

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

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, за которым следует пробел, результат должен быть точным.

41 голосов
/ 30 июня 2010

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

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

Прямо из Git Community Book

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

8 голосов
/ 29 февраля 2016

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

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

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

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

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

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

1 голос
/ 29 октября 2012

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

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

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

0 голосов
/ 13 октября 2016

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

git log 12345678..87654321 > C:\GitChanges.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...