Список всех коммитов для определенного файла
есть ли способ перечислить все коммиты, которые изменили конкретный файл?
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 <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>
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>