Вы ищете изменения в файле через одну ветку; через все местные филиалы; через все филиалы на одном пульте; или через все это? Я думаю, что через все это потребуется сценарий.
Бенхорген
Ответы:
1085
В --followработах для конкретного файла
git log --follow -- filename
Разница с другими решениями
Обратите внимание, что другие решения включают git log path(без --follow). Этот подход удобен, если вы хотите отслеживать, например, изменения в каталоге , но запинается, когда файлы переименовываются (таким образом, используются --follow filename).
+1 --followучитывает переименования, так что это более git log -- path
надежно,
42
Обратите внимание, что --followдопускается путь , который может быть как файлом, так и каталогом. В последнем случае он будет работать рекурсивно и сообщать об изменениях во все файлы ниже этой точки. (Такое поведение не задокументировано на странице руководства и может не быть постоянным.)
StvnW
5
Какая разница между этим и простоgit log filename?
VaTo
8
@SaulOrtega, git log filenameне следует за переименованием файла, то есть он покажет все коммиты относительно этого имени файла (не фактический файл). Если вы создаете файлы Xи Y, изменили оба, затем удалили Yи переименовали Xв, Yа затем также изменили его, и вы запустили git log Y, вы получите сообщения как для старого, такY и для нового . И наоборот, --followвы получите коммиты для этого файла, когда он был назван Xи когда он был назван Y.
MarSoft
7
используйте "git log --all filename" для просмотра всех
коммитов
122
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.
Не работает, если путь к файлу изменился. ответ крольчонка действительно работает для этого случая.
Кван
1
Это работает, если вам нужно ограничить журнал определенной веткой
ams
64
Я внимательно посмотрел на это, и все эти ответы, похоже, не показывают мне все коммиты по всем веткам.
Вот то, что я придумал, возиться с опциями просмотра редактирования gitk. Это показывает мне все коммиты для файла независимо от ветки, local, reflog и remote.
Это идеально подходит для тех случаев, когда кто-то вносит изменения, но забывает, где они вносили изменения.
earthmeLon
2
Очень полезный. Включает также
тайники
Это должно быть предпочтительным ответом. Вопрос заключался в том, чтобы найти все коммиты, этот делает.
Карл Вербиест
Обратите внимание, что --reflogвключает коммиты, которые были перебазированы / исправлены или иным образом отброшены. Может быть, это должно быть очевидно, но я пытался использовать это с git logи пытался выяснить, почему я вижу, казалось бы, дублированные коммиты!
Сорен Бьорнстад
43
Используйте команду ниже, чтобы получить коммиты для определенного файла:
Я понимаю, что это не совсем отвечает на вопрос, так как он хотел получить список коммитов, но это золото, и оно у меня в файле.
zkent
3
Это не будет работать вообще, если файл не существует в текущей проверенной ветке. Вы можете добавить ветку как git log -p mybranch -- filenameили просто использовать git log --all -- filenameдля просмотра всех веток.
Сорен Бьорнстад
37
Это должно быть так же просто, как git log <somepath>; проверьте страницу руководства ( git-log(1)).
Лично мне нравится использовать, git log --stat <path>чтобы я мог видеть влияние каждого коммита на файл.
Или даже -pесли вы хотите увидеть полный diff, а не только то, что в нем было изменено некоторое количество строк.
Каскабель
Правда, но это довольно шумно, учитывая, что большинство файлов были изменены много раз за свою жизнь. Я не хочу видеть полные различия каждого коммита, который когда-либо касался файла. Я обычно ищу какую-то конкретную вещь, поэтому я могу получить журнал с просто ударами, а затем git showпо конкретным коммитам, которые выглядят так, как будто они имеют значение.
rfunduk
git log --stat --follow - * .html => выводить список коммитов с ровно одним файлом в каждом коммите. Очень хорошо!
Серхио Белевский
18
В качестве альтернативы (начиная с Git 1.8.4), также можно просто получить все коммиты, которые изменили определенную часть файла. Вы можете получить это, передав начальную строку и номер конечной строки.
Возвращенным результатом будет список коммитов, которые изменили эту конкретную часть. Команда выглядит так:
Как указал jackrabb1t, --followон более устойчив, поскольку продолжает перечислять историю за пределами переименований / перемещений. Таким образом, если вы ищете файл, который в данный момент не находится на том же пути, или файл, который был переименован во время различных коммитов, --follow будет отслеживать его.
Это может быть лучшим вариантом, если вы хотите визуализировать изменения имени / пути:
git log --follow --name-status -- <path>
Но если вы хотите более компактный список только с тем, что имеет значение:
--followработает для одного пути , который может быть каталогом. Если передать каталог, он будет работать рекурсивно и сообщать об изменениях во всех файлах ниже этой точки.
StvnW
10
Если вы пытаетесь - следовать за файлом, удаленным при предыдущем использовании фиксации
Для gitновичков: используйте git log -p --follow -- filenameдля отображения изменений. Также обратите внимание: «имя файла» может быть файлом, каталогом или подмодулем.
Тино
8
Если вы хотите просмотреть все коммиты, которые изменили файл, во всех ветвях используйте это:
Если вы хотите увидеть все изменения, сделанные в коммитах, которые изменили конкретный файл (а не только изменения в самом файле), вы можете передать --full-diff:
Его можно установить с помощью "sudo apt-get install git-gui gitk". Его можно использовать для просмотра фиксаций определенного файла с помощью «gitk <Filename>».
Ответы:
В
--follow
работах для конкретного файлаРазница с другими решениями
Обратите внимание, что другие решения включают
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
мужчины :источник
Я внимательно посмотрел на это, и все эти ответы, похоже, не показывают мне все коммиты по всем веткам.
Вот то, что я придумал, возиться с опциями просмотра редактирования gitk. Это показывает мне все коммиты для файла независимо от ветки, local, reflog и remote.
Это также работает с
git log
:источник
--reflog
включает коммиты, которые были перебазированы / исправлены или иным образом отброшены. Может быть, это должно быть очевидно, но я пытался использовать это сgit log
и пытался выяснить, почему я вижу, казалось бы, дублированные коммиты!Используйте команду ниже, чтобы получить коммиты для определенного файла:
источник
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), также можно просто получить все коммиты, которые изменили определенную часть файла. Вы можете получить это, передав начальную строку и номер конечной строки.
Возвращенным результатом будет список коммитов, которые изменили эту конкретную часть. Команда выглядит так:
где
upperLimit
этоstart_line_number
иlowerLimit
являетсяending_line_number
Дополнительная информация - https://www.techpurohit.com/list-some-useful-git-commands
источник
Как указал jackrabb1t,
--follow
он более устойчив, поскольку продолжает перечислять историю за пределами переименований / перемещений. Таким образом, если вы ищете файл, который в данный момент не находится на том же пути, или файл, который был переименован во время различных коммитов, --follow будет отслеживать его.Это может быть лучшим вариантом, если вы хотите визуализировать изменения имени / пути:
Но если вы хотите более компактный список только с тем, что имеет значение:
или даже
Недостатком является то, что
--follow
работает только для одного файла.источник
--follow
работает для одного пути , который может быть каталогом. Если передать каталог, он будет работать рекурсивно и сообщать об изменениях во всех файлах ниже этой точки.Если вы пытаетесь - следовать за файлом, удаленным при предыдущем использовании фиксации
источник
git
новичков: используйтеgit log -p --follow -- filename
для отображения изменений. Также обратите внимание: «имя файла» может быть файлом, каталогом или подмодулем.Если вы хотите просмотреть все коммиты, которые изменили файл, во всех ветвях используйте это:
источник
Если вы хотите искать все коммиты по,
filename
а не поfilepath
, используйте:источник
Если вы хотите увидеть все изменения, сделанные в коммитах, которые изменили конкретный файл (а не только изменения в самом файле), вы можете передать
--full-diff
:источник
[branch]
Используйте
git log --all <filename>
для просмотра коммитов, влияющих<filename>
на все ветви.источник
Предполагая, что пакет "gitk" уже установлен.
Если он не установлен, сделайте это:
А затем попробуйте указанную выше команду. Это для Linux ... Это может помочь пользователям Linux, если они хотят графический интерфейс.
источник
gitk
поставляется в комплекте с Git для Windows.Чтобы просто получить список хэшей коммитов, используйте
git rev-list
Вывод:
что означает 5 коммитов коснулись этого файла. Это обратный хронологический порядок, поэтому первый коммит в списке
b7c4f0d7
самый последний.источник
В Linux вы можете использовать gitk для этого.
Его можно установить с помощью "sudo apt-get install git-gui gitk". Его можно использовать для просмотра фиксаций определенного файла с помощью «gitk <Filename>».
источник
Ссылка
источник