488 votes

Comment trouver le parent le plus proche d'une branche Git ?

Disons que j'ai le dépôt local suivant avec un arbre de commit comme ceci :

master --> a
            \
             \
      develop c --> d
               \
                \
         feature f --> g --> h

master est mon il s'agit du dernier code de la version stable , develop est mon il s'agit du code de la "prochaine" version y feature es une nouvelle fonctionnalité en préparation pour develop .

En utilisant des crochets, je veux être capable de refuser les poussées pour feature à mon référentiel distant, à moins que le commit f est un descendant direct de develop HEAD. C'est à dire que l'arbre de commit ressemble à ceci, parce que la fonctionnalité a été git rebase en d .

master --> a
            \
             \
      develop c --> d
                     \
                      \
               feature f --> g --> h

Alors, est-il possible de :

  • Identifiez la branche mère de feature ?
  • Identifiez le commit de la branche mère qui f est un descendant de ?

A partir de là, je vérifierais quel est le HEAD de la branche mère, et voir si f Le prédécesseur correspond à la branche parent HEAD, pour déterminer si la fonctionnalité doit être rebasée.

0 votes

Cette question devrait être reformulée pour trouver le parent d'un parent.

0voto

jake Points 43

Si quelqu'un veut faire cela de nos jours, le logiciel d'Atlassian Sourcetree vous montre une excellente représentation visuelle de la façon dont vos branches sont liées les unes aux autres, c'est-à-dire où elles ont commencé et où elles se situent actuellement dans l'ordre de livraison (par exemple, HEAD ou 4 commits derrière, etc.).

0 votes

On peut avoir besoin d'utiliser la branche parentale dans un script, et pour cela il faut extraire le nom du parent.

0voto

Mike Points 707

Si vous utilisez Sourcetree, regardez les détails de votre livraison. Parents . Vous verrez alors les numéros d'engagement soulignés (liens).

0voto

Une alternative :

git rev-list master | grep "$(git rev-list HEAD)" | head -1

Obtenir le dernier commit que c'est à la fois ma branche et master (ou toute autre branche que vous souhaitez spécifier).

0voto

verdverm Points 195

Cela n'a pas fonctionné pour moi lorsque j'avais fait quelque chose comme développer release-v1.0.0 feature-foo . Elle remonterait jusqu'au développement. Notez qu'il y avait un rebasement impliqué et je ne suis pas sûr que cela aggrave mon problème...

Ce qui suit a donné le bon hash de commit pour moi :

git log --decorate \
  | grep 'commit' \
  | grep 'origin/' \
  | head -n 2 \
  | tail -n 1 \
  | awk '{ print $2 }' \
  | tr -d "\n"

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