J'ai expérimenté un peu et ceci semble faire l'affaire pour naviguer vers l'avant ( éditer : cela ne fonctionne bien que lorsque l'on a un historique linéaire sans commits de fusion) :
git checkout $(git rev-list --topo-order HEAD..towards | tail -1)
donde towards
est un SHA1 de la livraison ou d'une balise.
Explication :
- la commande à l'intérieur
$()
signifie : obtenir toutes les modifications entre la version actuelle de HEAD
y towards
s'engager (à l'exclusion des HEAD
), et les trier dans l'ordre de priorité (comme dans git log
par défaut -- au lieu de l'ordre chronologique qui est bizarrement l'ordre par défaut pour les rev-list
), puis prendre le dernier ( tail
), c'est-à-dire celui vers lequel nous voulons aller.
- est évaluée dans le sous-shell et transmise à
git checkout
pour effectuer un contrôle.
Vous pouvez définir une fonction accessible en tant qu'alias attendu par les paramètres dans votre .profile
pour naviguer vers le commit en question :
# Go forward in Git commit hierarchy, towards particular commit
# Usage:
# gofwd v1.2.7
# Does nothing when the parameter is not specified.
gofwd() {
git checkout $(git rev-list --topo-order HEAD.."$*" | tail -1)
}
# Go back in Git commit hierarchy
# Usage:
# goback
alias goback='git checkout HEAD~'