J'ai un référentiel git avec plusieurs branches.
Comment savoir quelles branches sont déjà fusionnées dans la branche principale?
git branch --merged master
répertorie les branches fusionnées en maître
git branch --merged
répertorie les branches fusionnées dans HEAD (c'est-à-dire la pointe de la branche actuelle)
git branch --no-merged
répertorie les branches qui n'ont pas été fusionnées
Par défaut, cela s'applique uniquement aux succursales locales. Le -a
drapeau affichera les branches locales et distantes, et le -r
drapeau ne montrera que les branches distantes.
git branch --merged
puis supprimé les branches locales et distantes.git branch -a --merged/no-merged
cela fonctionne également, sans créer de branche de suivi locale dans le processus.git branch -r --merged/--no-merged
pour ne trouver que des succursales distantes.--merged/--no-merged
prend un argument de validation facultatif après. Au moins dans ma version de git (1.9.1), l'ajout du drapeau-a
ou-r
après cela me donne une erreur fatale. Ajoutez le-a
ou-r
avant--(no-)merged
.Vous pouvez utiliser la
git merge-base
commande pour trouver le dernier commit commun entre les deux branches. Si ce commit est le même que votre chef de branche, alors la branche a été complètement fusionnée.la source
git branch -d
refusera de supprimer une branche qui n'a pas été fusionnée dans la branche actuelle. Ne pas supprimer la branche actuelle .Il existe également une solution d'interface graphique. Tapez simplement
gitk --all
Une nouvelle fenêtre d'application vous demandera une représentation graphique de l'ensemble de votre référentiel, où il est très facile de savoir si une branche a déjà été fusionnée ou non
la source
git
client. Sur Ubuntu,apt-get install gitk
.brew install git-gui
, pour accédergitk
à la ligne de commande.J'utilise la fonction bash suivante comme:
git-is-merged develop feature/new-feature
la source
Utilisez
git merge-base <commit> <commit>
.Cette commande trouve les meilleurs ancêtres communs entre deux commits. Et si l'ancêtre commun est identique au dernier commit d'une "branche", alors nous pouvons sans risque supposer qu'une "branche" a déjà été fusionnée dans le maître.
Voici les étapes
git merge-base <commit-hash-step1> <commit-hash-step2>
.Plus d'informations sur git merge-base https://git-scm.com/docs/git-merge-base .
la source
master
été fusionnébranch
, puis 4 commits supplémentaires ont été ajoutésbranch
.git log -1 $(git merge-base base-branch feature-branch)
et si vous voyezfeature-branch
dans la sortie, alors vous savez qu'ils sont fusionnés?Sur le thème du nettoyage des succursales distantes
Ceci répertorie chaque branche distante suivie par les branches distantes dans lesquelles se trouvent leurs derniers SHA.
Ceci est utile pour discerner quelles branches distantes ont été fusionnées mais pas supprimées, et lesquelles n'ont pas été fusionnées et sont donc en décomposition.
Si vous utilisez 'tig' (c'est comme gitk mais basé sur un terminal), vous pouvez
pour voir l'historique des validations d'une branche sans avoir à passer à la caisse
la source
Afin de vérifier quelles branches sont fusionnées en master, vous devez utiliser ces commandes:
git branch <flag[-r/-a/none]> --merged master
liste de toutes les branches fusionnées en master.git branch <flag[-r/-a/none]> --merged master | wc -l
compter le nombre de toutes les branches fusionnées en maître.Les drapeaux sont:
-a
drapeau - (tous) montrant les succursales éloignées et locales-r
drapeau - (distant) affichant uniquement les branches distantes<emptyFlag>
- montrant uniquement les succursales localespar exemple:
git branch -r --merged master
vous montrera tous les référentiels distants fusionnés dans master.la source
Voici mes techniques lorsque j'ai besoin de déterminer si une branche a été fusionnée, même si elle a peut-être été rebasée pour être à jour avec notre branche principale, ce qui est un scénario courant pour les branches de fonctionnalités.
Aucune de ces approches n'est infaillible, mais je les ai trouvées utiles à plusieurs reprises.
1 Afficher le journal pour toutes les branches
En utilisant un outil visuel comme gitk ou TortoiseGit, ou simplement git log avec --all, parcourez l'historique pour voir toutes les fusions vers la branche principale. Vous devriez pouvoir repérer si cette branche de fonctionnalité particulière a été fusionnée ou non.
2 Toujours supprimer la branche distante lors de la fusion dans une branche de fonction
Si vous avez l'habitude de toujours supprimer la branche locale et la branche distante lorsque vous fusionnez dans une branche de fonctionnalité, vous pouvez simplement mettre à jour et tailler les télécommandes sur votre autre ordinateur et les branches de fonctionnalité disparaîtront.
Pour ne pas oublier de le faire, j'utilise déjà des extensions de flux git (édition AVH) pour créer et fusionner mes branches de fonctionnalités localement, j'ai donc ajouté le hook de flux git suivant pour me demander si je souhaite également supprimer automatiquement la branche distante.
Exemple de branche de fonction de création / finition
.git / hooks / post-flow-feature-finish
3 Recherche par message de validation
Si vous ne supprimez pas toujours la branche distante, vous pouvez toujours rechercher des validations similaires pour déterminer si la branche a été fusionnée ou non. Le piège ici est que la branche distante a été redéfinie sur le non reconnaissable, comme écraser les commits ou changer les messages de commit.
Exemples de commandes sur la branche principale:
Dans ma configuration bash .profile
la source
git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
git log
vous pouvez ajouter--merges
pour afficher uniquement les validations de fusion. stackoverflow.com/a/25986615/134761Voici un petit one-liner qui vous permettra de savoir si votre branche actuelle incorpore ou est à court de données d'une branche d'origine / maître distante:
Je suis tombé sur cette question lorsque je travaillais sur une branche de fonctionnalité et que je voulais souvent m'assurer que le travail le plus récent était intégré dans ma propre branche de travail distincte.
Pour généraliser ce test, j'ai ajouté l'alias suivant à mon ~ / .gitconfig:
Ensuite, je peux appeler:
pour vérifier si je suis à jour.
la source