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?
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.
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.
É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é
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.
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)
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.
git show --stat origin/branch_name
Cela vous donnera une liste des fichiers qui ont été ajoutés ou modifiés sous cette branche.
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>)
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
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)"
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
Git diff -- maître nom uniquement...nom de la branche
Auquel nous voulons comparer.