Как иметь git log show filenames, такие как svn log -v

Журнал SVN имеет режим "-v", который выводит имена файлов, измененных в каждом коммите, например:

jes5199$ svn log -v
------------------------------------------------------------------------
r1 |   jes5199 | 2007-01-03 14:39:41 -0800 (Wed, 03 Jan 2007) | 1 line
Changed paths:
   A /AUTHORS
   A /COPYING
   A /ChangeLog
   A /EVOLUTION
   A /INSTALL
   A /MacOSX

Есть ли быстрый способ получить список измененных файлов в каждой фиксации в git?

+865
04 авг. '09 в 21:46
источник поделиться
10 ответов

Для полных имен путей измененных файлов:

git log --name-only

Полные имена путей и статус измененных файлов:

git log --name-status

Для сокращенных имен путей и diffstat измененных файлов:

git log --stat

Там больше возможностей, проверить документы.

+1356
04 авг. '09 в 21:48
источник

ПРИМЕЧАНИЕ: git whatchanged устарел, вместо этого используйте git log

Новым пользователям рекомендуется использовать вместо этого git-log [1]. Команда whatchanged по сути такая же, как git-log [1], но по умолчанию она показывает вывод whatchanged в необработанном формате и пропускает слияния.

Команда сохраняется в основном по историческим причинам; пальцы многих людей, которые изучили Git задолго до того, как git log был изобретен путем чтения списка рассылки ядра Linux, обучены его печатать.


Вы можете использовать команду git whatchanged --stat чтобы получить список файлов, которые менялись при каждой фиксации (вместе с сообщением фиксации).

Рекомендации

+139
04 авг. '09 в 21:48
источник

git show также отличная команда.

Это похоже на svn diff, но вы можете передать ему guid guid и посмотреть, что diff.

+46
22 мар. '11 в 0:02
источник

Если вы хотите получить имена файлов только без остальной части сообщения фиксации, вы можете использовать:

git log --name-only --pretty=format: <branch name>

Затем это можно расширить, чтобы использовать различные параметры, которые содержат имя файла:

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

Одна вещь, которую следует учитывать при использовании этого метода, состоит в том, что на выходе есть несколько пустых строк, которые нужно игнорировать. Использование этого может быть полезно, если вы хотите увидеть файлы, которые были изменены в локальном ветки, но еще не нажаты на удаленную ветку, и нет гарантии, что последняя из удаленного устройства уже была втянута. Например

git log --name-only --pretty=format: my_local_branch --not origin/master

Показать все файлы, которые были изменены в локальной ветке, но еще не объединены с главной ветвью на пульте дистанционного управления.

+42
11 июл. '13 в 2:06
источник

Я использую это ежедневно, чтобы показать историю с измененными файлами:

git log --stat --pretty=short --graph

Чтобы сохранить его, добавьте псевдоним в свой .gitconfig, выполнив:

git config --global alias.ls 'log --stat --pretty=short --graph'
+35
25 мая '15 в 0:24
источник

Я использую это:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

который выводит только список файлов и их состояние (добавлено, изменено, удалено):

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...
+15
30 сент. '14 в 13:18
источник

git diff --stat HEAD^! показывает измененные файлы и добавленные/удаленные подсчеты строк для последнего фиксации (HEAD).

Мне кажется, что нет единственной команды, чтобы получить краткий вывод, состоящий только из имен файлов, и добавил и удалил количество строк для нескольких коммитов одновременно, поэтому я создал свой собственный bash script для этого:

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

Называется, например. ./changed_files 99, чтобы получить изменения в краткой форме от HEAD до HEAD~99. Может быть подключен к трубопроводу, например. до less.

+7
25 нояб. '12 в 1:08
источник

Я считаю, что следующее - это идеальное отображение списка файлов, измененных за коммит, в кратком формате:

git log --pretty=oneline --graph --name-status
0
05 июн. '19 в 17:55
источник

Я обычно использую их, чтобы получить журналы:

$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"
0
07 мая '19 в 15:53
источник

Другой полезной командой будет git diff-tree <hash> где hash также может быть хеш-диапазоном (обозначается обозначением <old>..<new>). Пример вывода:

$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile

Поля:

режим источника, режим Dest, исходный хеш, Dest хэш, статус, имя файла

Ожидаемые статусы: D (удалено), A (добавлено), M (изменено) и т.д. См. Man-страницу для полного описания.

0
24 мар. '19 в 14:23
источник

Посмотрите другие вопросы по меткам или Задайте вопрос