Odpowiedzi:
git diff --name-only SHA1 SHA2
gdzie wystarczy podać wystarczającą ilość SHA, aby zidentyfikować zatwierdzenia. Możesz także zrobić na przykład
git diff --name-only HEAD~10 HEAD~5
aby zobaczyć różnice między dziesiątym ostatnim zatwierdzeniem a piątym ostatnim (lub tak).
git show --name-only SHA1
.
git diff --name-status [TAG|SHA1]
pokazuje, jakie operacje wykonano również na plikach
git diff --name-status
wydaje się , że nie chce wyświetlać dodanych plików. @sschuberth wskazał git show
, który wydaje się działać prawidłowo dla mnie git show --pretty=format: --name-status
. Samo robienie git show --name-status
daje trochę więcej informacji, ale wciąż jest ładne i gęste ... to będzie moje nowe polecenie goto;)
git diff --name-status [SHA1 [SHA2]]
jest jak - - tylko nazwa, z tym wyjątkiem, że otrzymujesz prosty prefiks informujący o tym, co się stało z plikiem (zmodyfikowany, usunięty, dodany ...)
git log --name-status --oneline [SHA1..SHA2]
jest podobny, ale zatwierdzenia są wyświetlane po komunikacie zatwierdzenia, dzięki czemu można zobaczyć, kiedy plik został zmieniony.
jeśli jesteś zainteresowany tym, co stało się z niektórymi plikami / folderami, możesz dołączyć -- <filename> [<filename>...]
do git log
wersji.
jeśli chcesz zobaczyć, co się stało dla pojedynczego zatwierdzenia, nazwij to SHA1, a następnie zrób
git log --name-status --oneline [SHA1^..SHA1]
Flagi statusu pliku:
M zmodyfikowany - Plik został zmodyfikowany
C kopiuj-edytuj - Plik został skopiowany i zmodyfikowany
R Zmień nazwę-edytuj - Plik został zmieniony i zmodyfikowany
A Dodano - Plik został dodany
D usunięty - Plik został usunięty
U unmerged - Plik ma konflikty po scaleniu
--relative[=<path>]
opcja może ci pomóc, nie jestem pewien. W przeciwnym razie zawsze będzie | erep -v '(.tmp|.foo|.dontwant)$'
...
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(-)
Istnieje 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(-)
Ale żeby zobaczyć, jak zmieniły się pliki między twoją gałęzią a jej wspólnym przodkiem z inną gałęzią (powiedz origin / master):
git diff --name-only `git merge-base origin/master HEAD`
git diffstatus master
lub coś podobnego, co wyzwala powyższe.
git show --pretty=format: --name-only origin/master..
.
git diff --name-only master..branch
nie odpowiada liście PR github. W ten sposób bardziej precyzyjny. Ale w każdym razie mam 173 pliki w chan kontra 171 w github PR. (bez merge-base
mam 228 vs 171)
Aby uzupełnić odpowiedź @ artfulrobot, jeśli chcesz pokazać zmienione pliki między dwoma oddziałami:
git diff --name-status mybranch..myotherbranch
Uważaj na pierwszeństwo. Jeśli najpierw umieścisz nowszą gałąź, wyświetli się ona jako usunięta, a nie dodana.
Dodanie grep
puszki uściśla rzeczy:
git diff --name-status mybranch..myotherbranch | grep "A\t"
To pokaże tylko dodane pliki myotherbranch
.
--diff-filter
ta funkcja, która daje natywną funkcjonalność, co oznacza mniejszą szansę na niepoprawne wyniki (np. Fałszywe alarmy)
Dodaj poniższy alias do swojego ~/.bash_profile
, a następnie uruchom source ~/.bash_profile
; teraz, kiedy chcesz zobaczyć zaktualizowane pliki w ostatnim zatwierdzeniu, uruchom, showfiles
z repozytorium git.
alias showfiles='git show --pretty="format:" --name-only'
git config --global alias.showfiles 'show --pretty="format:" --name-only'
zrobić git showfiles
.
Spowoduje to wyświetlenie zmian w plikach:
git diff --word-diff SHA1 SHA2
Użyj git log --pretty = oneline> C: \ nazwa_pliku.log
który rejestruje tylko oneline (--pretty = oneline), który jest nazwą zmienionego pliku. Również zapisuje wszystkie szczegóły w pliku wyjściowym.
git log --pretty=oneline
daje mi tylko SHA i komunikat zatwierdzenia za pomocą git 2.10.1
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
Poniższe działa dla mnie dobrze:
$ git show --name-only --format=tformat: SHA1..SHA2
Można go również użyć z jednym zatwierdzeniem:
git show --name-only --format=tformat: SHA1
który jest przydatny do użycia w Jenkins, gdzie masz Listę SHA zmian i chcesz iterować nad nimi, aby zobaczyć, które pliki zostały zmienione.
Jest to podobne do kilku powyższych odpowiedzi, ale użycie tformat:
zamiast format:
usuwa przestrzeń separatora między zatwierdzeniami.
Na podstawie git diff --name-status
napisałem rozszerzenie git git-diffview, które renderuje hierarchiczny widok drzewa tego, co zmieniło się między dwiema ścieżkami.