2010-09-13 1 views

ответ

702

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

git log --follow filename 

отличие от других решений данной

Обратите внимание, что другие решения включают git log path (без --follow). Этот подход удобен, если вы хотите отслеживать, например. изменения в каталоге , но спотыкается, когда файлы были переименованы (таким образом, используйте --follow filename).

+4

Это, скорее всего, список коммитов относительно файла по всем коммитам, в отличие от просто 'git log ' –

+11

+1 '--follow' учитывает переименования, поэтому это более надежный, чем' git log-path' –

+20

Обратите внимание, что '--follow' принимает _path_, который может быть файлом, но также и каталогом. В случае последнего он будет работать рекурсивно и сообщать об изменениях ко всем файлам ниже этого пункта. (Это поведение не задокументировано в man-странице и может не быть постоянным.) – StvnW

112

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. 
+8

Не работает, если путь файла был изменен. Ответ на jackrabbit действительно подходит для этого случая. – kwahn

+1

Это работает, если вам нужно ограничить журнал определенной веткой – AaronS

28

Должно быть так просто, как git log <somepath>, проверьте страницу руководства (git-log(1)).

Лично я хотел бы использовать git log --stat <path>, чтобы я мог видеть влияние каждой фиксации на файл.

+8

Или даже '-p', если вы хотите увидеть полный diff, а не только, что у него было некоторое количество строк. – Cascabel

+0

Правда, но это довольно шумно, учитывая, что большинство файлов были изменены много раз по сравнению с их жизнью. Я не хочу видеть полные различия между каждым сообщением, которое когда-либо касалось файла. Обычно я ищу конкретную вещь, поэтому я могу получить журнал с ударами, а затем «git show» на конкретные коммиты, которые выглядят так, как будто они имеют значение. – rfunduk

27

Используйте команду ниже, чтобы получить фиксации для конкретного файла:

git log -p filename 
+2

Я понимаю, что это точно не отвечает на вопрос, так как ему нужен список коммитов, но это золото и идет в моем файле. – zkent

11

Как 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 работает только для одного файла.

+3

'--follow' работает для одного _path_, который может быть каталогом. Если он прошел через каталог, он будет рекурсивно работать и сообщать об изменениях ко всем файлам ниже этого пункта. – StvnW

0

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

2
gitk <path_to_filename> 

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

sudo apt-get install gitk 

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

6

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

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

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

где upperLimit является start_line_number и lowerLimit является ending_line_number

3

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

8

Если вы пытаетесь --follow файл удален в предыдущей фиксации использования

git log --follow -- filename 
+2

Для 'git' newbies: используйте« git log -p --follow - filename », чтобы отобразить изменения. Также обратите внимание: «filename» может быть файлом, каталогом или подмодулем. – Tino

24

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

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

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

Это прекрасно, когда кто-то вносит изменения, но они забывают, где они совершили изменения. – earthmeLon

+0

Очень полезно. Включает также фиксации закладок –

+0

Также работает с 'git log'. Очень круто. –

3

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

git log --follow --all <filepath> 
0
# 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> 

Reference

1

, если вы хотите посмотреть на все совершают на filename и не наfilepath

git log --all -- '*.wmv' 
Смежные вопросы