Existe-t-il un moyen de voir quels fichiers ont changé dans une branche?
Existe-t-il un moyen de voir quels fichiers ont changé dans une branche?
Réponses:
Une alternative à la réponse de @Marco Ponti, et en évitant le paiement:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Si votre shell particulier ne comprend pas la construction $ (), utilisez plutôt des ticks arrière.
git diff --name-only <some-other-branch>
vous montrera quels fichiers sont différents entre votre branche actuelle et <some-other-branch>
. Il est donc essentiellement la même commande, mais notez que vous pouvez utiliser pour trouver les fichiers qui sont différents entre les deux branches, même si elles ne sont pas à distance liés. L'utilité ou non de cette comparaison dépend de la topologie de vos branches ... Notez également <some-other-branch>
qu'il pourrait s'agir de n'importe quel commit, ou de tout ce qui se résout en un (tags, etc.).
<notMainDev>
et <MY_CURRENT_CO_BRANCH>
plus récemment avait un ancêtre commun, et se comparera <notMainDev>
à cet ancêtre. Vous devrez cependant fournir le nom de votre branche actuelle, comme le git merge-base
prévoit deux arguments - il n'y a pas de raccourci, du moins dans la version actuelle.
git branch | grep '\*' | awk '{print $2}'
qui obtiendra le commit de la branche entre <notMainDev> et ma branche actuelle. Je peux alors faire git diff --name-only <notMainDev> $ (git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
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.
<mainDev>
depuis la divergence des branches. Vous voudrez peut-être utiliser à la git diff --name-only <sha-of-branch-point>
place, ou voir la réponse alternative que j'ai publiée qui évite le paiement.
notMainDev
serait tenu à jour avec les commits mainDev ... Je trouve généralement utile de voir ces différences aussi bien.
<sha-of-branch-point>
avecgit rev-parse <branch-name>
étonné que cela n'ait pas été dit jusqu'à présent!
git diff master...branch
Donc, voyez les changements uniquement sur branch
Pour vérifier l'utilisation de la branche actuelle
git diff master...
Merci à jqr
C'est la main courte pour
git diff $(git merge-base master branch) branch
donc la base de fusion (le commit le plus récent entre les branches) et la pointe de branche
Utiliser également origin / master au lieu de simplement master aidera dans le cas où votre master local est daté
git diff --name-only master..
si vous voulez juste les noms de fichiers différents entre les deux branches.
Je ne peux pas croire qu'il y ait tant de façons de le faire. J'utilise ce qui a changé comme quelqu'un a déjà posté, juste avec les arguments suivants:
git whatchanged --name-only --pretty="" origin..HEAD
Cela répertorie simplement les noms de fichiers et uniquement 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. J'utilise donc ceci:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
lorsqu'il est exécuté sur la branche cible et obtenez le même résultat. Pourriez-vous avoir la gentillesse de fournir des commentaires sur ce qui est bon ou mauvais entre votre réponse et la commande que j'ai fournie?
git diff master.. --name-only
(notez qu'il n'y a que 2 points au lieu de 3). Pour comprendre ce que signifient les points, consultez cette réponse
git diff --name-only master...branch-name
auquel nous voulons comparer.
Et si ça pouvait être aussi simple que ça?
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, vous pouvez ajouter cet alias à votre ~/.gitconfig
fichier pour le rendre aussi simple:
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 faites.
En outre, vous devez utiliser un shell qui prend 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.
Pour une raison quelconque, personne n'a mentionné git-tree
. Voir https://stackoverflow.com/a/424142/1657819
git-tree
est préféré car c'est une plomberie commande de ; censé être programmatique (et, probablement, plus rapide)
(en supposant que la branche de base est master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
Cependant, cela vous montrera tous les fichiers qui ont été affectés dans la branche, si vous voulez voir uniquement les fichiers modifiés explicitement , vous pouvez utiliser --diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
On peut également utiliser --name-status
au lieu de --name-only
pour voir l'état des fichiers ( A
/ M
/ D
et ainsi de suite)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
La réponse acceptée - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- est très proche, mais j'ai remarqué que le statut était incorrect pour les suppressions. J'ai ajouté un fichier dans une branche, et pourtant cette commande (en utilisant --name-status
) a donné au fichier j'ai supprimé le statut "A" et le fichier j'ai ajouté le statut "D".
J'ai dû utiliser cette commande à la place:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
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 dans l'environnement de chemin). J'avais en fait besoin de montrer les différences réelles en utilisant un outil de configuration configuré (kdiff3), j'ai donc remplacé la commande bash suivante ci-dessus:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"