Jak wypisać tylko nazwy plików, które zmieniły się między dwoma zatwierdzeniami?

Mam kilka commitów w repo. Chcę zobaczyć listę plików zmienionych pomiędzy dwoma commitami-z SHA1 na SHA2.

Jakiego polecenia powinienem użyć?

Author: Chris Stryczynski, 2009-10-12

11 answers

git diff --name-only SHA1 SHA2

Gdzie musisz tylko dołączyć wystarczającą ilość SHA, aby zidentyfikować commity. Można również zrobić, na przykład

git diff --name-only HEAD~10 HEAD~5

Aby zobaczyć różnice między dziesiątym ostatnim commitem a piątym ostatnim (lub tak).

 2068
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-12 01:51:34
git diff --name-status [SHA1 [SHA2]]

Jest jak --name-only, z wyjątkiem prostego przedrostka informującego o tym, co się stało z plikiem (zmodyfikowanym, usuniętym, dodanym...)

git log --name-status --oneline [SHA1..SHA2]

Jest podobny, ale commity są wyświetlane po komunikacie commit, więc możesz zobaczyć, kiedy plik został zmieniony.

  • Jeśli interesuje Cię tylko to, co stało się z niektórymi plikami/folderami, możesz dołączyć -- <filename> [<filename>...] do wersji git log.

  • Jeśli chcesz zobaczyć, co się stało z pojedynczym commitem, nazwij go SHA1, a następnie do
    git log --name-status --oneline [SHA1^..SHA1]

Flagi statusu pliku:
M modified-plik został zmodyfikowany
C copy-edit-File has been copied and modified
R rename - edit-File has been renamed and modified
Dodano - plik
D deleted-plik został usunięty
U unmerged-plik zawiera konflikty po połączeniu

 351
Author: artfulrobot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-10 22:15:48

Ale aby zobaczyć zmiany plików pomiędzy twoją gałęzią a jej wspólnym przodkiem z inną gałęzią (powiedzmy origin/master):

git diff --name-only `git merge-base origin/master HEAD`
 43
Author: Tim James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-23 19:08:21

Wygląda na to, że nikt nie wspomniał o przełączniku --stat:

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

Istnieją również --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

I --shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)
 34
Author: leeyuiwah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 21:50:40

Aby uzupełnić odpowiedź @artfulrobot, jeśli chcesz pokazać zmienione pliki między dwoma gałęziami:

git diff --name-status mybranch..myotherbranch
Uważaj na pierwszeństwo. Jeśli najpierw umieścisz nowszą gałąź, wyświetli ona pliki jako usunięte, a nie dodane.

Dodanie grep może jeszcze bardziej Dopracować:

git diff --name-status mybranch..myotherbranch | grep "A\t"

, które następnie pokażą tylko pliki dodane w myotherbranch.

 19
Author: Max MacLeod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-29 13:17:26

Dodaj poniżej alias do ~/.bash_profile, następnie uruchom, source ~/.bash_profile; teraz w każdej chwili musisz zobaczyć zaktualizowane pliki w ostatnim zatwierdzeniu, run, showfiles z repozytorium git.

alias showfiles='git show --pretty="format:" --name-only'
 8
Author: Zorayr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-10 19:38:17

To pokaże zmiany w plikach:

git diff --word-diff SHA1 SHA2
 7
Author: Julio Marins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 15:10:40

Użycie Git log --pretty=oneline >C:\filename.log

Który zarejestruje tylko oneline (--pretty=oneline) o nazwie zmienionego pliku. Również zapisze wszystkie szczegóły do pliku wyjściowego.

 3
Author: Agni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-10 10:59:35

Zwróć również uwagę, jeśli chcesz zobaczyć zmienione pliki pomiędzy ostatnim zatwierdzeniem a poprzednim. To działa dobrze: git show --name-only

 2
Author: Parris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 20:42:14

Jak powiedział artfulrobot w swojej odpowiedzi:

git diff --name-status [SHA1 [SHA2]]

Mój przykład:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 
4b95d595812211553070046bf2ebd807c0862cca
M       views/layouts/default.ctp
M       webroot/css/theme.css
A       webroot/img/theme/logo.png
 2
Author: Jaime Montoya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 12:37:07

Na podstawie git diff --name-status napisałem rozszerzenie git-diffview Git, które renderuje hierarchiczny widok drzewa zmian pomiędzy dwiema ścieżkami.

 0
Author: Bernard Opic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-03 09:39:46