Ответы:
В --follow
работах для конкретного файла
git log --follow -- filename
Разница с другими решениями
Обратите внимание, что другие решения включают git log path
(без --follow
). Этот подход удобен, если вы хотите отслеживать, например, изменения в каталоге , но запинается, когда файлы переименовываются (таким образом, используются --follow filename
).
--follow
учитывает переименования, так что это более git log -- path
--follow
допускается путь , который может быть как файлом, так и каталогом. В последнем случае он будет работать рекурсивно и сообщать об изменениях во все файлы ниже этой точки. (Такое поведение не задокументировано на странице руководства и может не быть постоянным.)
git log filename?
git log filename
не следует за переименованием файла, то есть он покажет все коммиты относительно этого имени файла (не фактический файл). Если вы создаете файлы X
и Y
, изменили оба, затем удалили Y
и переименовали X
в, Y
а затем также изменили его, и вы запустили git log Y
, вы получите сообщения как для старого, так Y
и для нового . И наоборот, --follow
вы получите коммиты для этого файла, когда он был назван X
и когда он был назван Y
.
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.
Я внимательно посмотрел на это, и все эти ответы, похоже, не показывают мне все коммиты по всем веткам.
Вот то, что я придумал, возиться с опциями просмотра редактирования gitk. Это показывает мне все коммиты для файла независимо от ветки, local, reflog и remote.
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
Это также работает с git log
:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflog
включает коммиты, которые были перебазированы / исправлены или иным образом отброшены. Может быть, это должно быть очевидно, но я пытался использовать это с git log
и пытался выяснить, почему я вижу, казалось бы, дублированные коммиты!
Используйте команду ниже, чтобы получить коммиты для определенного файла:
git log -p filename
git log -p mybranch -- filename
или просто использовать git log --all -- filename
для просмотра всех веток.
Это должно быть так же просто, как git log <somepath>
; проверьте страницу руководства ( git-log(1)
).
Лично мне нравится использовать, git log --stat <path>
чтобы я мог видеть влияние каждого коммита на файл.
-p
если вы хотите увидеть полный diff, а не только то, что в нем было изменено некоторое количество строк.
git show
по конкретным коммитам, которые выглядят так, как будто они имеют значение.
В качестве альтернативы (начиная с 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
Как указал 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
работает только для одного файла.
--follow
работает для одного пути , который может быть каталогом. Если передать каталог, он будет работать рекурсивно и сообщать об изменениях во всех файлах ниже этой точки.
Если вы пытаетесь - следовать за файлом, удаленным при предыдущем использовании фиксации
git log --follow -- filename
git
новичков: используйте git log -p --follow -- filename
для отображения изменений. Также обратите внимание: «имя файла» может быть файлом, каталогом или подмодулем.
Если вы хотите просмотреть все коммиты, которые изменили файл, во всех ветвях используйте это:
git log --follow --all <filepath>
Если вы хотите искать все коммиты по, filename
а не по filepath
, используйте:
git log --all -- '*.wmv'
Если вы хотите увидеть все изменения, сделанные в коммитах, которые изменили конкретный файл (а не только изменения в самом файле), вы можете передать --full-diff
:
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
Предполагая, что пакет "gitk" уже установлен.
Если он не установлен, сделайте это:
sudo apt-get install gitk
А затем попробуйте указанную выше команду. Это для Linux ... Это может помочь пользователям Linux, если они хотят графический интерфейс.
gitk
поставляется в комплекте с Git для Windows.
Чтобы просто получить список хэшей коммитов, используйте git rev-list
git rev-list HEAD <filename>
Вывод:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
что означает 5 коммитов коснулись этого файла. Это обратный хронологический порядок, поэтому первый коммит в списке b7c4f0d7
самый последний.
В Linux вы можете использовать gitk для этого.
Его можно установить с помощью "sudo apt-get install git-gui gitk". Его можно использовать для просмотра фиксаций определенного файла с помощью «gitk <Filename>».
# 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>