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

579   7  

7 ответов:

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

git log --name-only

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

git log --name-status

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

git log --stat

есть еще много вариантов,проверить документы.

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

новые пользователи могут использовать git-log[1]. Этот whatchanged команда по существу такая же, как git-log[1] но по умолчанию показывают необработанный формат 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 до HEAD~99. Можно направить например. к less.

Comments

    Ничего не найдено.