Как иметь git log show filenames, такие как 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?
Ответы
Ответ 1
Для полных имен путей измененных файлов:
git log --name-only
Полные имена путей и статус измененных файлов:
git log --name-status
Для сокращенных имен путей и diffstat измененных файлов:
git log --stat
Там больше возможностей, проверить документы.
Ответ 2
ПРИМЕЧАНИЕ: git whatchanged
устарел, вместо этого используйте git log
Новым пользователям рекомендуется использовать вместо этого git-log [1]. Команда whatchanged
по сути такая же, как git-log [1], но по умолчанию она показывает вывод whatchanged
в необработанном формате и пропускает слияния.
Команда сохраняется в основном по историческим причинам; пальцы многих людей, которые изучили Git задолго до того, как git log
был изобретен путем чтения списка рассылки ядра Linux, обучены его печатать.
Вы можете использовать команду git whatchanged --stat
чтобы получить список файлов, которые менялись при каждой фиксации (вместе с сообщением фиксации).
Рекомендации
Ответ 3
git show
также отличная команда.
Это похоже на svn diff
, но вы можете передать ему guid guid и посмотреть, что diff.
Ответ 4
Если вы хотите получить имена файлов только без остальной части сообщения фиксации, вы можете использовать:
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
Показать все файлы, которые были изменены в локальной ветке, но еще не объединены с главной ветвью на пульте дистанционного управления.
Ответ 5
Я использую это ежедневно, чтобы показать историю с измененными файлами:
git log --stat --pretty=short --graph
Чтобы сохранить его, добавьте псевдоним в свой .gitconfig
, выполнив:
git config --global alias.ls 'log --stat --pretty=short --graph'
Ответ 6
Я использую это:
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
git diff --stat HEAD^!
показывает измененные файлы и добавленные/удаленные подсчеты строк для последнего фиксации (HEAD
).
Мне кажется, что нет единственной команды, чтобы получить краткий вывод, состоящий только из имен файлов, и добавил и удалил количество строк для нескольких коммитов одновременно, поэтому я создал свой собственный bash script для этого:
#!/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
.
Ответ 8
Я считаю, что следующее - это идеальное отображение списка файлов, измененных за коммит, в кратком формате:
git log --pretty=oneline --graph --name-status
Ответ 9
Другой полезной командой будет git diff-tree <hash>
где hash также может быть хеш-диапазоном (обозначается обозначением <old>..<new>
). Пример вывода:
$ git diff-tree HEAD
:040000 040000 8e09a be406 M myfile
Поля:
режим источника, режим Dest, исходный хеш, Dest хэш, статус, имя файла
Ожидаемые статусы: D (удалено), A (добавлено), M (изменено) и т.д. См. Man-страницу для полного описания.
Ответ 10
Я обычно использую их, чтобы получить журналы:
$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"
$ git log --name-status --grep="<text from Commit message>"
Ответ 11
Сводка ответов с примером вывода
Это использует локальный репозиторий с пятью простыми коммитами.
‣ git log --name-only
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <[email protected]>
Date: Mon Oct 21 15:46:04 2019 -0700
mv file4 to file5
file5
commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <[email protected]>
Date: Mon Oct 21 15:36:32 2019 -0700
foo file1
really important to foo before the bar
file1
commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <[email protected]>
Date: Mon Oct 21 15:34:37 2019 -0700
foobar file2, rm file3
file2
file3
commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <[email protected]>
Date: Mon Oct 21 15:33:05 2019 -0700
Add file4
file4
commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <[email protected]>
Date: Mon Oct 21 15:32:41 2019 -0700
Added files
file1
file2
file3
‣ git log --name-status
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <[email protected]>
Date: Mon Oct 21 15:46:04 2019 -0700
mv file4 to file5
R100 file4 file5
commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <[email protected]>
Date: Mon Oct 21 15:36:32 2019 -0700
foo file1
really important to foo before the bar
M file1
commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <[email protected]>
Date: Mon Oct 21 15:34:37 2019 -0700
foobar file2, rm file3
M file2
D file3
commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <[email protected]>
Date: Mon Oct 21 15:33:05 2019 -0700
Add file4
A file4
commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <[email protected]>
Date: Mon Oct 21 15:32:41 2019 -0700
Added files
A file1
A file2
A file3
‣ git log --stat
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <[email protected]>
Date: Mon Oct 21 15:46:04 2019 -0700
mv file4 to file5
file4 => file5 | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <[email protected]>
Date: Mon Oct 21 15:36:32 2019 -0700
foo file1
really important to foo before the bar
file1 | 3 +++
1 file changed, 3 insertions(+)
commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <[email protected]>
Date: Mon Oct 21 15:34:37 2019 -0700
foobar file2, rm file3
file2 | 1 +
file3 | 0
2 files changed, 1 insertion(+)
commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <[email protected]>
Date: Mon Oct 21 15:33:05 2019 -0700
Add file4
file4 | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <[email protected]>
Date: Mon Oct 21 15:32:41 2019 -0700
Added files
file1 | 0
file2 | 0
file3 | 0
3 files changed, 0 insertions(+), 0 deletions(-)
‣ git log --name-only --oneline
ed080bc (HEAD -> master) mv file4 to file5
file5
5c4e8cf foo file1
file1
1b64134 foobar file2, rm file3
file2
file3
e0dd02c Add file4
file4
b58e856 Added files
file1
file2
file3
‣ git log --pretty=oneline --graph --name-status
* ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master) mv file4 to file5
| R100 file4 file5
* 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328 foo file1
| M file1
* 1b6413400b5a6a96d062a7c13109e6325e081c85 foobar file2, rm file3
| M file2
| D file3
* e0dd02ce23977c782987a206236da5ab784543cc Add file4
| A file4
* b58e85692f711d402bae4ca606d3d2262bb76cf1 Added files
A file1
A file2
A file3
‣ git diff-tree HEAD
ed080bc88b7bf0c5125e093a26549f3755f7ae74
:100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 D file4
:000000 100644 0000000000000000000000000000000000000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A file5
‣ git log --stat --pretty=short --graph
* commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
| Author: My Name <[email protected]>
|
| mv file4 to file5
|
| file4 => file5 | 0
| 1 file changed, 0 insertions(+), 0 deletions(-)
|
* commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
| Author: My Name <[email protected]>
|
| foo file1
|
| file1 | 3 +++
| 1 file changed, 3 insertions(+)
|
* commit 1b6413400b5a6a96d062a7c13109e6325e081c85
| Author: My Name <[email protected]>
|
| foobar file2, rm file3
|
| file2 | 1 +
| file3 | 0
| 2 files changed, 1 insertion(+)
|
* commit e0dd02ce23977c782987a206236da5ab784543cc
| Author: My Name <[email protected]>
|
| Add file4
|
| file4 | 0
| 1 file changed, 0 insertions(+), 0 deletions(-)
|
* commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <[email protected]>
Added files
file1 | 0
file2 | 0
file3 | 0
3 files changed, 0 insertions(+), 0 deletions(-)
‣ git log --name-only --pretty=format:
file5
file1
file2
file3
file4
file1
file2
file3
‣ git log --name-status --pretty=format:
R100 file4 file5
M file1
M file2
D file3
A file4
A file1
A file2
A file3
‣ git diff --stat 'HEAD^!'
file4 => file5 | 0
1 file changed, 0 insertions(+), 0 deletions(-)
‣ git show
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <[email protected]>
Date: Mon Oct 21 15:46:04 2019 -0700
mv file4 to file5
diff --git a/file4 b/file5
similarity index 100%
rename from file4
rename to file5
Кредиты @CB-Bailey @Питер-Сувара @Gaurav @Омер-Даган @xsor @Hazok @nrz @ptc