webentwicklung-frage-antwort-db.com.de

Holen Sie sich alle Dateien, die in git branch geändert wurden

Gibt es eine Möglichkeit zu sehen, welche Dateien sich in einem Zweig geändert haben?

136
Raif

Eine Alternative zur Antwort von @Marco Ponti und das Auschecken vermeiden:

git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)

Wenn Ihre spezielle Shell das $ () - Konstrukt nicht versteht, verwenden Sie stattdessen Back-Ticks.

118
twalberg

Alles was Sie tun müssen, ist folgendes:

git checkout <notMainDev>
git diff --name-only <mainDev>

Dadurch werden nur die Dateinamen angezeigt, die sich zwischen den beiden Zweigen unterscheiden.

102
Marco Ponti

erstaunt das ist bisher nicht gesagt worden!

git diff master...branch

Also die Änderungen nur auf branch sehen

Um den aktuellen Zweig zu überprüfen, verwenden Sie 

git diff master...

Danke an jqr 

Dies ist eine kurze Hand für

git diff $(git merge-base master branch) branch

also die Zusammenführungsbasis (das letzte gemeinsame Commit zwischen den Verzweigungen) und die Verzweigungsspitze

Auch die Verwendung von Origin/Master anstelle von nur Master hilft, falls Ihr lokaler Master veraltet ist 

41
exussum

Ich kann nicht glauben, dass es so viele Möglichkeiten gibt, dies zu tun. Ich benutze Whatchanged als jemand, der zuvor gepostet wurde, nur mit den folgenden Argumenten:

git whatchanged --name-only --pretty="" Origin..HEAD

Hier werden nur die Dateinamen aufgeführt und nur die, die sich im aktuellen Zweig geändert haben.

33
lukiller

Die Antwort von @ twalberg hat mir sehr gefallen, aber ich wollte nicht ständig den aktuellen Filialnamen eingeben. Also benutze ich das:

git diff --name-only $(git merge-base master HEAD)
16
Yep_It's_Me

git whatchanged scheint eine gute Alternative zu sein.

11
chalasr

Was wäre, wenn es so einfach sein könnte?

git changed

Wenn Sie bereit sind anzunehmen, dass der Hauptzweig "master" heißt und Sie Ihre anderen Zweige aus master erstellen, können Sie diesen Alias ​​zu Ihrer ~/.gitconfig-Datei hinzufügen, um es so einfach zu machen:

cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"

Diese Annahmen funktionieren in den meisten Situationen für die meisten Menschen, aber Sie müssen sich dessen bewusst sein, dass Sie sie machen.

Außerdem müssen Sie eine Shell verwenden, die $() unterstützt. Es ist sehr wahrscheinlich, dass Ihre Shell dies unterstützt .

8
iconoclast
git show --stat Origin/branch_name

Dadurch erhalten Sie eine Liste der Dateien, die unter diesem Zweig hinzugefügt oder geändert wurden.

4
Badari

Die akzeptierte Antwort - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>) - ist sehr nahe, aber ich habe festgestellt, dass sie den Status falsch für Löschungen erhalten hat. Ich fügte eine Datei in einem Zweig hinzu, und dennoch gab dieser Befehl (mit --name-status) der Datei den Status "A" und die Datei "D".

Ich musste stattdessen diesen Befehl verwenden:

git diff --name-only $(git merge-base <notMainDev> <mainDev>)
1
Connor Clark

git diff - Name-only Master ... Zweigname

mit dem wir vergleichen wollen.

0
Rajesh Dusa

Erweiterung von dem, was @twalberg und @iconoclast hatten, wenn Sie cmd aus irgendeinem Grund verwenden, können Sie Folgendes verwenden:

FOR /F "usebackq" %x IN (`"git branch | grep '*' | cut -f2 -d' '"`) DO FOR /F "usebackq" %y IN (`"git merge-base %x master"`) DO git diff --name-only %x %y
0
Lunyx

Die folgende Batchdatei basiert auf der Antwort von twalberg, funktioniert jedoch unter Windows:

@ECHO OFF
C:                               :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are  :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with Origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% Origin/drop2/master)"
PAUSE

Das Obige geht davon aus, dass der Hauptzweig Origin/master ist und dass git bash bei der Installation von Git mit einbezogen wurde (und sich in der Pfadumgebung befindet). Ich musste tatsächlich die tatsächlichen Unterschiede mit einem konfigurierten Vergleichstool (kdiff3) anzeigen. Ersetzen Sie daher den folgenden bash-Befehl:

bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% Origin/drop2/master)"
0
Steve Chambers

Ich benutze grep so bekomme ich nur die Zeilen mit diff --git welche die Dateipfade sind:

git diff branchA branchB | grep 'diff --git'
// OUTPUTS ALL FILES WITH CHANGES, SIMPLE HA :)
diff --git a/package-lock.json b/package-lock.json
0
T04435