J'ai une ancienne branche que je voudrais supprimer. Cependant, avant de le faire, je veux vérifier que tous les commits faits à cette branche ont été fusionnés à un moment donné dans une autre branche. Ainsi, j'aimerais voir tous les commits de ma branche actuelle qui n'ont été appliqués à aucune autre branche [ou, si cela n'est pas possible sans script, comment voir tous les commits d'une branche qui n'ont pas été appliqués à une autre branche donnée?].
Vous voulez probablement juste
git branch --contains branch-to-delete
Ceci listera toutes les branches contenant les commits de "branche à supprimer". S'il en signale plus que "branche à supprimer", la branche a été fusionnée.
Vos alternatives ne sont vraiment que des choses sur la syntaxe de la liste de révocation. par exemple. git log one-branch..another-branch
montre tout ce que one-branch
doit avoir tout ce que another-branch
a.
Vous pouvez également être intéressé par git show-branch
comme moyen de voir ce qu’il ya où.
Pour voir une liste des commits qui se trouvent sur une branche mais pas sur une autre, utilisez git log:
git log --no-merges oldbranch ^newbranch
... c'est-à-dire, affiche les journaux de commit pour tous les commits sur oldbranch qui sont pas sur newbranch. Vous pouvez répertorier plusieurs branches à inclure et à exclure, par exemple.
git log --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2
Remarque: sous Windows ^
est une touche d'échappement, il doit donc être échappé avec un autre ^
:
git log --no-merges oldbranch ^^newbranch
Pour afficher les commits dans oldbranch mais pas dans newbranch:
git log newbranch..oldbranch
Pour montrer le diff par ces commits (notez qu'il y a trois points):
git diff newbranch...oldbranch
Voici la doc avec une illustration de diagramme https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
Certaines des réponses publiées ici vous aideront à trouver ce que vous cherchez, mais la sous-commande suivante de git branch est une solution plus adaptée à votre tâche.
Tandis que dans master
, vous pouvez exécuter la commande pour énumérer les branches que vous pouvez supprimer en toute sécurité, comme ceci:
git branch --merged
develop
fpg_download_links
* master
master_merge_static
# Delete local and remote tracking branches you don't want
git branch -d fpg_download_links
git Push Origin :fpg_download_links
git branch -d master_merge_static
git Push Origin :master_merge_static
# There is also a flag to specify remote branches in the output
git branch --remotes --merged
Pour ceux qui recherchent encore une réponse simple, consultez git cherry . Il compare les différences réelles au lieu des hachages de validation. Cela signifie qu’il s’adapte aux commits qui ont été choisis ou rebasés.
Commencez par vérifier la branche que vous souhaitez supprimer:
git checkout [branch-to-delete]
utilisez ensuite git cherry pour le comparer à votre branche de développement principale:
git cherry -v master
Exemple de sortie:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message
Remarque: L'indicateur -v
doit inclure le message de validation avec le hachage SHA.
Les lignes précédées du signe "+" se trouvent dans la branche à supprimer, mais pas dans la branche principale. Ceux qui ont un '-' devant ont un commit équivalent en master.
Pour JUST les commits qui ne sont pas en master, combinez cherry pick avec grep:
git cherry -v master | grep "^\+"
Exemple de sortie:
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
réponse de jimmyorr ne fonctionne pas sous Windows. il est utile d’utiliser --not
au lieu de ^
comme ceci:
git log oldbranch --not newbranch --no-merges
Si c'est n (unique) branche que vous devez vérifier, par exemple si vous voulez que la branche 'B' soit entièrement fusionnée dans la branche 'A', vous pouvez simplement procéder comme suit:
$ git checkout A
$ git branch -d B
git branch -d <branchname>
a la sécurité suivante: "La branche doit être entièrement fusionnée dans HEAD."
Attention: cela supprime la branche B si elle est fusionnée avec A.
Vous pouvez utiliser ce script simple pour voir les commits qui ne sont pas fusionnés
#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
# git branch-notmerge <branchname>
#
# Setup git alias
# git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')
Vous pouvez également utiliser l'outil git-wtf qui affichera l'état des branches