Как сделать так, чтобы git log отображал имена файлов, такие как svn log -v - PullRequest
879 голосов
/ 05 августа 2009

Журнал 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?

Ответы [ 10 ]

1372 голосов
/ 05 августа 2009

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

git log --name-only

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

git log --name-status

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

git log --stat

Есть намного больше вариантов, посмотрите документы .

139 голосов
/ 05 августа 2009

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

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

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


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

Ссылки

46 голосов
/ 22 марта 2011

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

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

42 голосов
/ 11 июля 2013

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

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

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

36 голосов
/ 25 мая 2015

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

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

Для краткости добавьте псевдоним в .gitconfig, выполнив:

git config --global alias.ls 'log --stat --pretty=short --graph'
15 голосов
/ 30 сентября 2014

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

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
...
7 голосов
/ 25 ноября 2012

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

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

#!/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.

0 голосов
/ 05 июня 2019

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

git log --pretty=oneline --graph --name-status
0 голосов
/ 07 мая 2019

Я обычно использую их для получения журналов:

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

$ git log --name-status --grep="<text from Commit message>"
0 голосов
/ 24 марта 2019

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

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

Поля:

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

Состояния - это те, которые вы ожидаете: D (удалено), A (добавлено), M (изменено) и т. Д. См. Справочную страницу полностью описание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...