Je fais 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 m'assurer que je suis dans le bon.
Je sais HEAD^
revenir en arrière dans l'histoire mais y a-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 mon objectif est F et je veux passer de C à D .
REMARQUE: ce n'est pas un doublon de Git: comment se déplacer entre les commits , ma question est légèrement différente et n'y répond pas
git checkout -b new_branch HEAD~4
pour revenir 4 commits de HEAD comme dans stackoverflow.com/a/4940090/911945Réponses:
J'ai un peu expérimenté et cela semble faire l'affaire pour naviguer vers l'avant ( modifier : cela ne fonctionne bien que lorsque vous avez un historique linéaire sans commits de fusion):
où
towards
est un SHA1 du commit ou une balise.Explication:
$()
signifie: récupérez tous les commits entre courantHEAD
ettowards
commit (à l'exclusionHEAD
), et triez-les dans l'ordre de priorité (commegit log
par défaut - au lieu de l'ordre chronologique qui est étrangement celui par défautrev-list
), puis prenez le dernier (tail
), c'est-à-dire celui vers lequel nous voulons aller.git checkout
pour effectuer une extraction.Vous pouvez définir une fonction accessible en tant qu'alias en attente de paramètres dans votre
.profile
fichier pour avancer vers le commit particulier:la source
git log
affiche les commits dans l'ordre chronologique, par défaut, le même querev-list
, sauf lors de l'utilisation de l'--graph
indicateur.Tout ce dont vous avez besoin pour obtenir un état de tête clair et non détaché est de réinitialiser, pas de vérifier.
la source
git reset "HEAD@{1}"
dans certains shells comme fish et powershell ..git reflog
peut également être utile pour trouver le bon commit.git reset HEAD
pour revenir là où j'étais ... maintenant je n'ai aucune idée de l'état dans lequel se trouve mon référentiel et tout est effrayant. Qu'est-ce que je devrais faire maintenant?Je crois que vous pouvez faire:
Faire avancer un engagement dans le temps. Pour faire avancer plusieurs validations, utilisez HEAD @ {2}, HEAD @ {3}, etc.
la source
C'est ce que j'utilise pour naviguer dans les deux sens.
passer au prochain commit
passage au commit précédent
la source
git checkout <current branch>
s'attache au dernier commit.git checkout -b <new-branch-name>
à partir de la validation actuelle permet des changements dans la nouvelle branche.git rebase -i
fonctionne également. De plus , j'ai nommé man()
fonctionnx()
pour éviter tout conflit avec le gestionnaire de version de nœud "n". Assurez-vous de vérifier les alias!Dites que F est le dernier commit sur
trunk
(insérez votre propre nom de branche ici) ... vous pouvez vous y référer commetrunk~0
(ou simplementtrunk
), E commetrunk~1
, D commetrunk~2
etc.Jetez un œil dans votre reflog pour encore plus de façons de nommer les commits.
la source
F
et que vous savez où dans l'historique de cette branche vous voulez vous déplacer. Il n'essaie pas d'avancer par rapport à HEAD, mais moins loin par rapport au tronc.trunk~2
A?trunk
et votre courantHEAD
sont identiques, ce qui n'est pas montré dans la question, ce que j'ai déclaré n'est pas ce que je suppose, et ce qui est très improbable à mi-chemin d'unbisect
Traverser en arrière est trivial puisque vous vous déplacez dans l'arbre, et il y a toujours un chemin à parcourir
Lorsque vous avancez, vous vous déplacez vers le haut de l'arbre, vous devez donc être explicite sur la branche que vous ciblez:
Utilisation:
git down
,git up <branch-name>
la source
HEAD^
soit généralement un défaut raisonnable.Si vous voulez voir plus loin, vous pouvez faire cette astuce, car Git n'a pas de commande stricte pour cela.
Exemple
Liste des hachages de l'historique des journaux:
en utilisant la commande
git log --reverse C..
, en sortie , vous verrez B et A .la source
Probablement pas la meilleure façon, mais vous pouvez utiliser
git log
pour afficher la liste des commits, puis utilisergit checkout [sha1 of D]
pour passer à D.la source
Je viens de faire un test à ce sujet. dites par exemple que vous êtes dans la branche principale Puis faites:
Alors la tête se détache, et vous pouvez alors réessayer pour aller à n'importe quel autre commit:
Une fois que vous avez terminé de regarder autour de vous, vous pouvez revenir à votre état d'origine simplement en vous connectant à cette branche. Dans mon exemple: master branch
Si vous ne voulez pas revenir à l'état d'origine et que vous voulez garder l'un des commits en tête et continuer à partir de là, vous devez alors vous dériver à partir de là. par exemple après "git checkout HEAD @ {4}", vous pouvez émettre
la source
Pour contourner ce problème, vous pouvez simplement revenir à HEAD avec
Et puis passez au commit que vous souhaitez, avec
la source
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
la source
où:
branchName
est égal au nom de la succursalecommitInOrder
équivaut à un commit dans l'ordre à partir du tout premier commit dans la branche sélectionnée (donc 1 est le tout premier commit, 2 est le deuxième commit dans la branche, etc.)la source