1135 votes

Comment puis-je savoir à git si une branche est déjà fusionnée dans maître ?

<p>J’ai un dépôt git avec plusieurs branches.</p> <p>Comment puis-je savoir quelles branches sont déjà fusionnés dans la branche master ?</p>

1784voto

hectorsq Points 12776
<p>J’ai trouvé moi-même la réponse :<p><code></code>répertorie les branches qui ont été fusionnées dans la branche actuels</p><p><code></code>répertorie les branches qui n’ont pas été fusionnées</p><p>Par défaut cela concerne seulement les branches locales. Le <code></code> indicateur affichera des branches locales et distantes et le <code></code> drapeau montre seulement les branches éloignées.</p></p>

112voto

Greg Hewgill Points 356191
<p>Vous pouvez utiliser le <a href="http://www.kernel.org/pub/software/scm/git/docs/v0.99.1/git-merge-base.html"> <code></code> </a> commande pour trouver le dernier commit commun entre les deux branches. Si cette validation est identique à la tête de la branche, la branche a été fusionnée complètement.<p>Notez que <code></code> fait ce genre de chose déjà parce qu’il refuse de supprimer une branche qui <em>n’a pas</em> déjà été complètement fusionné.</p></p>

27voto

iberbeu Points 1191
<p>Il y a une solution d’interface graphique ainsi. Il suffit de taper<p><code></code></p><p>Une nouvelle fenêtre d’application vous invite à une représentation graphique de votre repo entier, où il est très facile à réaliser si une branche est déjà fusionnée ou non</p></p>

12voto

ClothSword Points 1559

Sur le sujet du nettoyage des branches distantes

git branch -r | xargs -t -n 1 git branch -r --contains

Cette liste chaque branche distante suivie par lequel les branches distantes leur dernier SHAs sont à l'intérieur.

Cela est utile pour discerner les branches distantes ont été fusionnés, mais pas supprimé, et qui n'ont pas été fusionnés et sont donc en décomposition.

Si vous utilisez 'tig' (son comme gitk mais terminal), alors vous pouvez

tig origin/feature/someones-decaying-feature

pour voir une branche de commettre l'histoire sans avoir à git checkout

5voto

Andreas Larsen Points 2115

Voici ma technique quand j'ai besoin de comprendre si une branche a été fusionnées, même si elle peut avoir été relocalisée à être à jour avec notre branche principale, qui est un scénario commun pour les branches.

Aucune de ces approches sont infaillibles, mais je les ai trouvés utiles à de nombreuses reprises.

1 voir le journal pour toutes les branches

À l'aide d'un outil visuel comme gitk ou TortoiseGit, ou tout simplement la commande git log --tout, aller à travers l'histoire pour voir toutes les fusions à la branche principale. Vous devriez être en mesure de repérer si cette particularité de la branche a été fusionnées ou non.

2 retirez Toujours à distance, de la direction de la fusion en une fonction de direction

Si vous avez une bonne habitude de toujours retirer à la fois le local et le distant de la branche lors de la fusion dans une branche, alors vous pouvez simplement mettre à jour et de pruneau télécommandes sur votre autre ordinateur et les branches vont disparaître.

Pour aider à se rappeler ce faisant, je suis déjà en utilisant git flow extensions (AVH édition) création et la fusion de mes branches en local, j'ai donc ajouté ce qui suit git flow crochet pour me demander si je tiens également à l'auto-suppression de la branche distante.

Exemple de création/finition fonction de direction

554 Andreas:MyRepo(develop)$ git flow start tmp
Switched to a new branch 'feature/tmp'

Summary of actions:
- A new branch 'feature/tmp' was created, based on 'develop'
- You are now on branch 'feature/tmp'

Now, start committing on your feature. When done, use:

     git flow feature finish tmp

555 Andreas:MyRepo(feature/tmp)$ git flow finish
Switched to branch 'develop'
Your branch is up-to-date with 'if/develop'.
Already up-to-date.

[post-flow-feature-finish] Delete remote branch? (Y/n)
Deleting remote branch: origin/feature/tmp.

Deleted branch feature/tmp (was 02a3356).

Summary of actions:
- The feature branch 'feature/tmp' was merged into 'develop'
- Feature branch 'feature/tmp' has been locally deleted
- You are now on branch 'develop'

556 Andreas:ScDesktop (develop)$

.git/hooks/post-flux-fonction-finition

NAME=$1
ORIGIN=$2
BRANCH=$3

# Delete remote branch
# Allows us to read user input below, assigns stdin to keyboard
exec < /dev/tty

while true; do
  read -p "[post-flow-feature-finish] Delete remote branch? (Y/n) " yn
  if [ "$yn" = "" ]; then
    yn='Y'    
  fi
  case $yn in
      [Yy] ) 
        echo -e "\e[31mDeleting remote branch: $2/$3.\e[0m" || exit "$?"
        git push $2 :$3; 
        break;;
      [Nn] ) 
        echo -e "\e[32mKeeping remote branch.\e[0m" || exit "$?"
        break;;
      * ) echo "Please answer y or n for yes or no.";;
  esac
done

# Stop reading user input (close STDIN)
exec <&-
exit 0

3 Recherche par message de commit

Si vous n'avez pas toujours supprimer la branche distante, vous pouvez toujours rechercher similaire s'engage à déterminer si la branche a été fusionnée ou non. Le piège ici est de savoir si la branche à distance a été relocalisée à l'méconnaissables, comme l'écrasement de validation ou modification des messages de commit.

  • Extraire et tailler toutes les télécommandes
  • Rechercher le message du dernier commit sur la branche
  • Voir si une livraison avec le même message peut être trouvé sur la branche master

Exemple de commandes sur la branche master:

gru                   
gls origin/feature/foo
glf "my message"

Dans mon bash .profil config

alias gru='git remote update -p'
alias glf=findCommitByMessage

findCommitByMessage() {
    git log -i --grep="$1"
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X