Как заставить 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
.