web-dev-qa-db-fra.com

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

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

136
Raif

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

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

Si votre Shell particulier ne comprend pas la construction $ (), utilisez plutôt des contrôles à rebours.

118
twalberg

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.

102
Marco Ponti

étonné que cela n'ait pas été dit jusqu'à présent!

git diff master...branch

Donc, voyez les modifications uniquement sur branch

Pour vérifier l'utilisation actuelle de la branche 

git diff master...

Merci à jqr 

Ceci est la main courte pour

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

donc la base de fusion (le plus récent des commits communs entre les branches) et la pointe de la branche

Également utiliser Origin/master au lieu de seulement master vous aidera si votre maître local est daté 

41
exussum

Je ne peux pas croire qu'il y a tellement de façons de faire cela. J'utilise whatchanged comme quelqu'un posté auparavant, juste avec les arguments suivants:

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

Cela ne fait que lister les noms de fichiers et uniquement ceux qui ont changé sur la branche actuelle.

33
lukiller

J'ai bien 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)
16
Yep_It's_Me

git whatchanged semble être une bonne alternative.

11
chalasr

Et si cela pouvait être aussi simple que cela?

git changed

Si vous êtes prêt à supposer que la branche principale s'appelle "maître" et que vous créez vos autres branches à partir de la base, vous pouvez ajouter cet alias à votre fichier ~/.gitconfig pour simplifier les choses:

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 savoir que vous les formulez.

En outre, vous devez utiliser un shell prenant en charge $(). Il est très probable que votre shell le supporte .

8
iconoclast
git show --stat Origin/branch_name

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

4
Badari

La réponse acceptée - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>) - est très proche, mais j’ai remarqué qu’elle obtenait le statut faux pour les suppressions. J'ai ajouté un fichier dans une branche, et pourtant cette commande (avec --name-status) a donné le fichier que j'ai supprimé le statut "A" et le fichier que j'ai ajouté le statut "D".

Je devais utiliser cette commande à la place:

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

git diff --nom-seulement maître ... nom-branche

à laquelle nous voulons comparer.

0
Rajesh Dusa

En développant ce que @twalberg et @iconoclast avaient, si vous utilisez cmd pour quelque raison que ce soit, 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
Lunyx

Le fichier de commandes 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 lors de l’installation de Git (et que son emplacement est situé dans l’environnement du chemin). En fait, j'avais besoin de montrer les différences réelles à l'aide d'un outil de diff configuré (kdiff3), de sorte que la commande bash suivante a été substituée:

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

J'utilise grep donc je n'ai que les lignes avec diff --git qui sont les 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
T04435