Récupère tous les fichiers qui ont été modifiés dans la branche git

Existe-t-il un moyen de voir quels fichiers ont changé dans une branche?

118
demandé sur nickf 2012-05-17 22:22:58

13 réponses

Une alternative à la réponse de @ Marco Ponti, et en évitant la caisse:

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

Si votre shell particulier ne comprend pas la construction $ (), utilisez plutôt back-ticks.

105
répondu twalberg 2012-05-17 18:53:56

Tout ce que vous avez à faire est le suivant:

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

Cela ne vous montrera que les noms de fichiers qui sont différents entre les deux branches.

94
répondu Marco Ponti 2012-05-17 18:26:35

Étonné cela n'a pas été dit jusqu'à présent!

git diff master...branch

Voir les modifications uniquement sur branch

Pour vérifier la branche actuelle, Utilisez

git diff master...

Merci à jqr

C'est une main courte pour

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

Donc la base de fusion (le commit commun le plus récent entre les branches) et la pointe de branche

Utiliser également origin / master au lieu de Just master aidera au cas où votre master local serait daté

34
répondu exussum 2017-06-11 13:48:45

Je n'arrive pas à croire qu'il y ait tant de façons de le faire. J'utilise whatchanged comme quelqu'un posté avant, juste avec les arguments suivants:

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

Cela répertorie simplement les noms de fichiers, et seulement ceux qui ont changé sur la branche actuelle.

30
répondu lukiller 2016-12-01 10:26:05

J'ai vraiment aimé la réponse de @twalberg mais je ne voulais pas avoir à taper le nom de la branche actuelle tout le temps. Donc, j'utilise ceci:

git diff --name-only $(git merge-base master HEAD)
11
répondu Yep_It's_Me 2017-01-04 06:29:21

git whatchanged semble être une bonne alternative.

10
répondu chalasr 2016-09-15 09:07:18

Si ça pouvait être aussi facile que cela?

git changed

Si vous êtes prêt à supposer que la branche principale est appelée "master", et que vous créez vos autres branches à partir de master, alors vous pouvez ajouter cet alias à votre fichier ~/.gitconfig pour le rendre aussi facile:

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

Ces hypothèses fonctionneront pour la plupart des gens dans la plupart des situations, mais vous devez être conscient que vous les faites.

Aussi, vous devez utiliser un shell qui prend en charge $(). Il est très probable que votre shell supporte ce.

8
répondu iconoclast 2017-04-13 12:36:28
git show --stat origin/branch_name

Cela vous donnera une liste des fichiers qui ont été ajoutés ou modifiés sous cette branche.

5
répondu Badari 2016-01-07 11:46:55

La réponse acceptée: git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)

Est très proche, mais j'ai remarqué qu'il avait le statut mauvais pour les suppressions. J'ai ajouté un fichier dans une branche, et pourtant cette commande (en utilisant --name-status) a donné au fichier que j'ai supprimé le statut " A "et au fichier que j'ai ajouté le statut" D".

J'ai dû utiliser cette commande à la place: git diff --name-only $(git merge-base <notMainDev> <mainDev>)

1
répondu Connor Clark 2018-07-10 06:33:17

Expansion de ce que @twalberg et @ iconoclast avaient, si vous utilisez cmd pour une raison quelconque, vous pouvez utiliser:

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
répondu Lunyx 2016-06-02 13:41:46

Le fichier batch suivant est basé sur la réponse de twalberg mais fonctionnera sous 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

Ce qui précède suppose que la branche principale est origin / master et que Git bash a été inclus lorsque Git a été installé (et son emplacement est dans l'environnement path). En fait, j'avais besoin de montrer les différences réelles en utilisant un outil de diff configuré (kdiff3) donc substitué la commande bash suivante ci-dessus:

bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"
0
répondu Steve Chambers 2016-12-14 10:18:53

J'utilise grep, donc je ne reçois que des lignes avec diff --git, qui sont le chemin d'accès des fichiers:

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
répondu T04435 2017-11-10 05:09:02

Git diff -- maître nom uniquement...nom de la branche

Auquel nous voulons comparer.

0
répondu Rajesh Dusa 2018-05-18 11:07:50