Cum pentru a lista numai nume de fișiere care au schimbat între două comite?

Am o grămadă de comite în repo. Vreau să văd o listă de fișiere schimbat între două comite - de la SHA1 să SHA2.

Ce comanda trebuie sa folosesc?

Comentarii la întrebare (1)
Soluția
git diff --name-only SHA1 SHA2

în cazul în care aveți nevoie doar de a include suficient de SHA pentru a identifica comite. Puteți face, de asemenea, de exemplu

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

pentru a vedea diferențele între cea de-a zecea cea mai recentă a comis-o și a cincea cea mai recentă (sau cam asa ceva).

Comentarii (12)
git diff --name-status [SHA1 [SHA2]]

este ca-nume-doar, doar vei ajunge un simplu prefix vă spun ce s-a întâmplat la dosar (modificate, șterse, a adăugat...)

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

este similar, dar se angajează sunt enumerate după comiterea mesaj, astfel încât să puteți vedea atunci când un fișier a fost schimbat.

  • daca're interesat în doar ce s-a întâmplat la anumite fișiere/foldere puteți adăuga -- <nume> [<nume>...] " la " git log versiune.

  • dacă doriți să vedeți ce s-a întâmplat pentru un singur comite, spune SHA1, apoi face git log-numele-de stare-oneline [SHA1^..SHA1]

Fișier starea steaguri: M modificate - Fișierul a fost modificat C copy-edit - Fișier a fost copiat si modificat R redenumiți-edit - Fișier a fost redenumit și modificate Un adăugată - Fișierul a fost adăugat D șters - Fișierul a fost șters U unmerged - Fișier a conflictelor după unificare

Comentarii (4)

Se pare că nimeni nu a menționat switch --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(-)

Există, de asemenea, --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(-)
Comentarii (2)

Dar pentru a vedea fișierele schimbat între sucursală și strămoș comun cu o altă ramură (spun origine/master):

git diff --name-only `git merge-base origin/master HEAD`
Comentarii (5)

Pentru a suplimenta @artfulrobot's a răspunde, dacă doriți să arate schimbat fișiere între două ramuri:

git diff --name-status mybranch..myotherbranch

Fii atent la prioritate. Daca ai loc de noi sucursale în primul rând, atunci aceasta ar arăta fișierele de șters, mai degrabă decât de adăugat.

Adăugarea unui grep poate rafina și mai mult lucrurile:

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

Care va afișa apoi doar fișierele adăugate în myotherbranch.

Comentarii (1)

Adauga mai jos alias ta ~/.bash_profile, apoi fugi, source ~/.bash_profile; acum, oricând aveți nevoie pentru a vedea fișierele actualizate in ultimele comite, fugi, showfiles de depozit git.

alias showfiles='git show --pretty="format:" --name-only'
Comentarii (1)

Acest lucru va arăta modificări în fișiere:

git diff --word-diff SHA1 SHA2
Comentarii (0)

De asemenea, rețineți, dacă doriți doar pentru a vedea fișierele modificate între ultimul comite și cea dinaintea ei. Aceasta funcționează bine: `git show-numele-doar pentru

Comentarii (0)

Utilizarea git log-destul de=oneline >C:\filename.log

care va conecta numai un oneline (...destul de=oneline) asta e numele de fișier schimbat. De asemenea, va înregistra toate detaliile pentru fișierul de ieșire.

Comentarii (1)

Ca artfulrobot a declarat în răspunsul său:

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

Exemplul meu:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 
4b95d595812211553070046bf2ebd807c0862cca
M       views/layouts/default.ctp
M       webroot/css/theme.css
A       webroot/img/theme/logo.png
Comentarii (0)

Doar pentru cineva care are nevoie să se concentreze numai pe fișierele Java, aceasta este soluția mea:

 git diff --name-status SHA1 SHA2 | grep '\.java$'
Comentarii (0)

Următoarele funcționează bine pentru mine:

$ git show-numele-numai --format=tformat: SHA1..SHA2

Acesta poate fi, de asemenea, utilizat cu un singur comite:

git show-numele-numai --format=tformat: SHA1

care este la îndemână pentru utilizarea în Jenkins în cazul în care vă sunt prevăzute cu o Listă de changeSet SHA's, și vreau să itera peste ele pentru a vedea ce fișiere au fost modificate.

Acest lucru este similar cu un cuplu din raspunsurile de mai sus, dar folosind tformat: "mai degrabă decât" format: elimină spațiu separator între comite.

Comentarii (0)

Bazat pe git diff-numele-starea` am scris git-diffview git extensie care face un arbore ierarhic de vedere a ceea ce s-a schimbat între două căi.

Comentarii (0)