Dans l'exemple d'arborescence suivant:
A-B-C-D-E (master branch)
\
F-G-H (xxx branch)
Je cherche F - le premier commit dans la branche xxx. Je pense que c'est possible avec:
git log xxx --not master
et le dernier commit listé devrait être F. Est-ce la bonne solution ou peut-être y a-t-il quelques inconvénients?
Je sais qu'il y avait des questions similaires sur stackoverflow, mais personne n'a proposé une telle solution, et je ne sais pas si je le fais correctement.
Réponses:
Où «succursale» est le nom de votre succursale. Le point-point vous donne tous les commits que la branche a et que le maître n'a pas.
tail -1
renvoie la dernière ligne de la sortie précédente.la source
master
, et tant que votre branche n'a pas été supprimée, ilgit log <sha>..branch --oneline | tail -1
devrait toujours vous donner les résultats que vous recherchez.--reverse
pour lire les journaux à l'envers avec des couleurs, etc.Vous devez utiliser la
merge-base
fonctionnalité conçue pour résoudre exactement cela:la source
la source
Si votre branche (ancienne) de nouveau fusionnée avec master ne donne pas le résultat attendu, j'utilise un script python pour trouver l'ID de validation de la branche initiale.
git rev-list --first-parent changeset
--premier parent ne suit que le premier commit parent en voyant un commit de fusion.
Itérer l'ensemble de modifications de la commande ci-dessus jusqu'à ce que la branche parente soit trouvée.
la source
cependant cela ne vous donnera que le premier commit sur la branche xxx qui n'est pas dans master, pas le premier commit sur la branche xxx jamais. ce dernier serait difficile si la branche xxx a été supprimée et / ou recréée une ou plusieurs fois. dans ce cas, vous pouvez essayer ce qui suit:
la source
head -n 1
au lieu detail -1
?tail -1
renvoie le commit le plus récent au lieu du premier.git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1
la source