Как заставить git log показывать имена файлов, такие как 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?

7 ответов


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

git log --name-only

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

git log --name-status

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

git log --stat

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


Примечание: git whatchanged устарел, используйте

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

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


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

ссылки


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

вроде svn diff, но вы можете передать ему GUID фиксации и увидеть это различие.


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

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

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


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

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

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

git config --global alias.ls 'log --stat --pretty=short --graph'

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

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

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

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

#!/bin/bash
for ((i=0; i<=; 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 to HEAD~99. Можно направить например. к less.