Список всех коммитов для определенного файла

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

15 ответов


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

git log --follow -- filename

разница с другими решениями, приведенными

обратите внимание, что другие решения включают в себя git log path (без --follow). Такой подход удобен, если вы хотите отслеживать, например, изменения в каталог, но спотыкается, когда файлы были переименованы (таким образом использовать --follow 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>, проверьте manpage (git-log(1)).

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


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

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

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

как указал 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 log --follow -- filename

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

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

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

здесь upperLimit это start_line_number и lowerLimit - это ending_line_number


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

git log --follow --all <filepath>

Если вы хотите искать все commit by filename и а не filepath

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

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


gitk <path_to_filename>

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

sudo apt-get install gitk

и потом попробовать выше команды. Это для linux.. Это может помочь пользователям linux, если они хотят GUI.


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

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

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


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

ссылка