Existe-t-il un moyen de voir quels fichiers ont changé dans une branche?
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.
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é 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é
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.
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)
git whatchanged
semble être une bonne alternative.
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 .
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’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>)
git diff --nom-seulement maître ... nom-branche
à laquelle nous voulons comparer.
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
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)"
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