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

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

Ответ 1

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

git log --follow -- filename

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

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

Ответ 2

git log path должен делать то, что вы хотите. Из git log man:

[--] <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.

Ответ 3

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

git log -p filename

Ответ 4

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

Вот что я придумал, объединившись с параметрами просмотра gitk edit. Это показывает мне все коммиты для файла, независимо от ветки, локального, рефлогового и удаленного.

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

Ответ 5

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

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

Ответ 6

Как отметил 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 работает только для одного файла.

Ответ 7

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

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

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

где upperLimit - start_line_number а lowerLimit - ending_line_number

Дополнительная информация - https://www.techpurohit.com/list-some-useful-git-commands

Ответ 8

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

git log --follow -- filename

Ответ 9

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

git log --follow --all <filepath>

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

gitk <path_to_filename>

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

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

sudo apt-get install gitk

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

Ответ 14

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

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

Ответ 15

# 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>

Ссылка