Avant de répondre, ajoutons un peu de contexte, en expliquant ce qu'est cette HEAD
est.
First of all what is HEAD?
HEAD
est simplement une référence au commit actuel (le plus récent) sur la branche actuelle.
Il ne peut y avoir qu'un seul HEAD
à un moment donné (à l'exclusion de git worktree
).
Le contenu de HEAD
est stocké à l'intérieur .git/HEAD
et il contient les 40 octets SHA-1 du commit actuel.
detached HEAD
Si vous n'êtes pas sur le dernier commit - ce qui signifie que HEAD
pointe vers un commit antérieur dans l'historique, il est appelé detached HEAD
.
Sur la ligne de commande, cela ressemblera à ceci - SHA-1 à la place du nom de la branche, puisque la commande HEAD
ne pointe pas vers l'extrémité de la branche actuelle :
Quelques options sur la façon de récupérer d'un HEAD détaché :
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Ceci va extraire une nouvelle branche pointant vers le commit désiré.
Cette commande effectuera un checkout vers un commit donné.
À ce stade, vous pouvez créer une branche et commencer à travailler à partir de ce point.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# Create a new branch forked to the given commit
git checkout -b <branch name>
Vous pouvez toujours utiliser le reflog
également.
git reflog
affichera tout changement qui a mis à jour le HEAD
et en vérifiant l'entrée reflog souhaitée, on obtient la HEAD
à cet engagement.
Chaque fois que le HEAD est modifié, il y aura une nouvelle entrée dans le fichier reflog
git reflog
git checkout HEAD@{...}
Cela vous ramènera à votre engagement souhaité
"Déplacez" votre TÊTE vers l'engagement souhaité.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
- Note : ( Depuis Git 2.7 ), vous pouvez également utiliser le
git rebase --no-autostash
également.
"Annuler" le commit ou la plage de commit donnée.
La commande reset va "annuler" tous les changements effectués dans le commit donné.
Un nouveau commit avec le patch d'annulation sera commis tandis que le commit original restera également dans l'historique.
# Add a new commit with the undo of the original one.
# The <sha-1> can be any commit(s) or commit range
git revert <sha-1>
Ce schéma illustre quelle commande fait quoi.
Comme vous pouvez le voir ici, reset && checkout
modifier le HEAD
.
0 votes
Avez-vous déjà regardé stackoverflow.com/questions/277077/ ou stackoverflow.com/questions/2432579/ ou stackoverflow.com/questions/2342618/ ?