How to list all commits that changed a specific file?

Есть ли способ перечислить все коммиты, которые изменили определенный файл?

18 ответов

Решение

--follow работает для определенного файла

git log --follow -- filename

Разница с другими решениями

Обратите внимание, что другие решения включают git log path (без --follow). Такой подход удобен, если вы хотите отслеживать, например, изменения в каталоге, но запинается, когда файлы переименовываются (поэтому используйте --follow filename).

Я внимательно посмотрел на это, и все эти ответы, похоже, не показывают мне все коммиты по всем веткам.

Вот то, что я придумал, возиться с опциями просмотра редактирования gitk. Это показывает мне все коммиты для файла независимо от ветки, local, reflog и remote.

gitk --all --first-parent --remotes --reflog --author-date-order -- filename

git log path должен делать то, что вы хотите. От git log мужчина:

[--] <path>…

Show only commits that affect any of the specified paths. To prevent confusion with 
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.

Используйте команду ниже, чтобы получить коммиты для определенного файла:

git log -p filename

Это должно быть так просто, как git log <somepath>; проверьте страницу руководства (git-log(1)).

Лично я люблю использовать git log --stat <path> так что я могу видеть влияние каждого коммита на файл.

В качестве альтернативы (начиная с Git 1.8.4), также можно просто получить все коммиты, которые изменили определенную часть файла. Вы можете получить это, передав начальную строку и номер конечной строки.

Возвращенным результатом будет список коммитов, которые изменили эту конкретную часть. Команда выглядит так:

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

где upperLimit это start_line_number а также lowerLimit это ending_line_number

Как указал jackrabb1t, --follow является более надежным, поскольку он продолжает перечислять историю после переименований / перемещений. Итак, если вы ищете файл, который в данный момент не находится на том же пути, или файл, который был переименован во время различных коммитов, --follow будет отслеживать его.

Это может быть лучшим вариантом, если вы хотите визуализировать изменения имени / пути:

git log --follow --name-status -- <path>

Но если вы хотите более компактный список только с тем, что имеет значение:

git log --follow --name-status --format='%H' -- <path>

или даже

git log --follow --name-only --format='%H' -- <path>

Недостатком является то, что --follow работает только для одного файла.

Чтобы получить все фиксации для конкретного использования файла:

git rev-list HEAD --oneline FileName

Например

git rev-list HEAD --oneline index.html

Выход

      7a2bb2f update_index_with_alias
6c03e56 update_changes
e867142 Revert "add_paragraph"

См. Изображение в формате gif

Если вы хотите увидеть все изменения, сделанные в коммитах, которые изменили конкретный файл (а не только изменения в самом файле), вы можете передать --full-diff:

git log -p --full-diff [branch] -- <path>

Если вы хотите посмотреть все коммиты по filename и не filepath, используйте:

git log --all -- '*.wmv'

Если вы пытаетесь - следовать за файлом, удаленным при предыдущем использовании фиксации

git log --follow -- filename

Если вы хотите просмотреть все коммиты, которые изменили файл, во всех ветках, используйте это:

git log --follow --all <filepath>

Использование git log --all <filename> просматривать коммиты, влияющие <filename> во всех филиалах.

gitk <path_to_filename>

Предполагая, что пакет "gitk" уже установлен.

Если он не установлен, сделайте это:

sudo apt-get install gitk

А затем попробуйте указанную выше команду. Это для Linux... Это может помочь пользователям Linux, если они хотят графический интерфейс.

Чтобы просто получить список хэшей коммитов, используйте git rev-list

 git rev-list HEAD <filename>

Выход:

b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d

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

# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>

# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>

Ссылка

В Linux вы можете использовать gitk для этого.

Его можно установить с помощью "sudo apt-get install git-gui gitk". Его можно использовать для просмотра фиксаций определенного файла с помощью "gitk ".

не усложняй! это просто:

      git log PATH\To\file
Другие вопросы по тегам