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