Je suis en train de faire un git bisect
et après être arrivé au commit problématique, j'essaie maintenant de faire un pas en avant/en arrière pour être sûr d'être dans le bon.
Je connais HEAD^
pour revenir en arrière dans l'historique, mais existe-t-il un autre raccourci pour me faire avancer (vers un commit spécifique dans le futur) comme ceci:
A - B - C(HEAD) - D - E - F
Je sais que ma cible est F et je souhaite passer de C à D.
NOTE: ceci n'est pas une copie de Git: comment aller et venir entre les commits , ma question est légèrement différente et on n'y répond pas
J'ai un peu expérimenté et cela semble faire l'affaire pour naviguer vers l'avant:
git checkout $(git rev-list --topo-order HEAD..towards | tail -1)
où towards
est un SHA1 du commit ou une balise.
Explication:
$()
signifie: obtenir tous les commits entre les HEAD
actuels et les towards
commit (à l'exception de HEAD
), et les trier dans l'ordre de priorité (comme dans git log
par défaut - au lieu de l'ordre chronologique qui est étrangement celui par défaut pour rev-list
), et prenez ensuite le dernier (tail
), c’est-à-dire celui où nous voulons aller. git checkout
pour effectuer une extraction.Vous pouvez définir une fonction accessible sous forme d'alias dans l'attente d'un paramètre dans votre fichier .profile
pour naviguer vers le commit correspondant:
# 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~'
Tout ce dont vous avez besoin pour obtenir un état clair et non détaché est de réinitialiser, pas de régler.
git reset HEAD@{1}
Je crois que tu peux faire:
git checkout HEAD@{1}
Aller d'un engagement dans le temps. Pour avancer de plusieurs commits, utilisez HEAD @ {2}, HEAD @ {3}, etc.
C'est ce que j'utilise pour naviguer dans les deux sens.
passage au prochain commit
function n() {
git log --reverse --pretty=%H master | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout
}
passage au commit précédent
function p() {
git checkout HEAD^1
}
Dites que F est le dernier commit sur trunk
(insérez votre propre nom de branche ici) ... vous pouvez vous y référer comme trunk~0
(ou simplement trunk
), E comme trunk~1
, D comme trunk~2
etc.
Jetez un coup d'oeil dans votre reflog pour encore plus de façons de nommer les commits.
Ce n’est probablement pas le meilleur moyen, mais vous pouvez utiliser git log
pour afficher la liste des commits, puis utiliser git checkout [sha1 of D]
pour passer à D.
Je viens de faire un test sur ceci .. Dis par exemple que vous êtes dans la branche principale Alors faites:
git checkout HEAD@{3}
Alors la tête se détache, et vous pouvez ensuite réessayer pour utiliser un autre commit:
git checkout HEAD@{4}
Une fois que vous avez terminé, vous pouvez revenir à votre état d'origine en vérifiant simplement auprès de cette branche. Dans mon exemple: branche master
git checkout master
Si vous ne voulez pas revenir à l'état d'origine et que vous voulez conserver l'un des commits comme tête et continuer à partir de là, vous devez alors vous orienter à partir de là ... } ", vous pouvez émettre
git checkout -b MyNewBranch
Pour contourner le problème, vous pouvez simplement revenir à HEAD avec
git checkout <branch>
Puis passez au commit que vous souhaitez, avec
git checkout HEAD~<offset>
Traverser en arrière est trivial puisque vous descendez de l'arbre, et il y a toujours un chemin à parcourir
function git_down
git checkout HEAD^
end
Lorsque vous avancez dans l’arbre, vous devez indiquer explicitement la branche que vous ciblez:
function git_up
git log --reverse --pretty=%H $argv | grep -A 1 (git rev-parse HEAD) | tail -n1 | xargs git checkout
end
Utilisation: git down
, git up <branch-name>
branchName=master; commitInOrder=1; git checkout $(git log --pretty=%H "${branchName}" | tac | head -n "${commitInOrder}" | tail -n 1)
où:
branchName
est égal au nom de la branche
commitInOrder
est égal à une validation dans l'ordre de la première validation dans la branche sélectionnée (donc 1 est la toute première validation, 2 est la deuxième dans la branche, etc.)
Si vous utilisez vs code, l'historique Git est un plugin génial où vous pouvez voir efficacement les commits et vérifier leur contenu dans l'éditeur lui-même . Consultez le lien _