Git отчеты - получить измененные файлы

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

Что мне нужно запустить, чтобы получить этот список?

Ответ 1

Для файлов, измененных между заданным SHA и вашим текущим фиксацией:

git diff --name-only <starting SHA> HEAD

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

git diff --name-only <starting SHA>

В общем случае следующий синтаксис всегда укажет вам, какие файлы были изменены между двумя коммитами (заданными их SHA или другими именами):

git diff --name-only <commit1> <commit2>

Ответ 2

Чтобы найти имена всех файлов, измененных с момента последнего коммита:

git diff --name-only

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

git status

Ответ 3

  • Чтобы просмотреть все неустановленные отслеживаемые измененные файлы:

    git diff --name-only
    
  • Чтобы перечислить все поставленные отслеживаемые измененные файлы:

    git diff --name-only --staged
    
  • Чтобы отобразить все поэтапные и неустановленные отслеживаемые измененные файлы:

    { git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
    
  • Перечислить все untracked файлы (те, которые перечислены git status, поэтому не включая любые проигнорированные файлы):

    git ls-files --other --exclude-standard
    

Если вы используете это в оболочке script и хотите программно проверить, вернули ли эти команды что-нибудь, вас будет интересовать опция git diff --exit-code.

Ответ 4

Когда я добавил/изменил/удалил много файлов (с момента последнего коммита), мне нравится смотреть на эти изменения в хронологическом порядке.

Для этого я использую:

  • Чтобы перечислить все неустановленные файлы:

    git ls-files --other --modified --exclude-standard
    
  • Чтобы получить последнюю измененную дату для каждого файла:

    while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done
    
  • Чтобы отсортировать их от самых старых до более поздних:

    sort
    

Псевдоним упрощает использование:

alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done|sort'

Например:

[email protected]:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd

Теперь я могу просмотреть мои изменения, от самого старого до более позднего.

Ответ 5

С git show вы можете получить аналогичный результат. Чтобы просмотреть фиксацию (например, она выглядит в режиме просмотра git log) со списком файлов, включенных в нее, используйте:

git show --name-only [commit-id_A]^..[commit-id_B]

Где [commit-id_A] - начальная фиксация, а [commit-id_B] - последняя фиксация, которую вы хотите показать.

Особое внимание с символом ^. Если вы этого не сделаете, информация commit-id_A не будет развернута.

Ответ 6

Это можно сделать с помощью git status и команды grep, как показано ниже. Что-то вроде git status -s | grep M:

[email protected]:~/project-repo-directory# git status -s | grep M
 M src/.../file1.js
 M src/.../file2.js
 M src/.../file3.js
 ....