Comment puis-je changer mon dépôt git vers un commit particulier


192

Dans mon dépôt git, j'ai fait 5 commits, comme ci-dessous dans mon git log:

commit 4f8b120cdafecc5144d7cdae472c36ec80315fdc
Author: Michael 
Date:   Fri Feb 4 15:26:38 2011 -0800

commit b688d46f55db1bc304f7f689a065331fc1715079
Author: Michael
Date:   Mon Jan 31 10:37:42 2011 -0800

commit b364f9dcec3b0d52666c4f03eb5f6efb7e1e7bda
Author: Michael
Date:   Wed Jan 26 13:33:17 2011 -0800

commit 4771e26619b9acba3f059b491c6c6d70115e696c
Author: Michael 
Date:   Wed Jan 26 11:16:51 2011 -0800

commit 6e559cb951b9bfa14243b925c1972a1bd2586d59
Author: Michael 
Date:   Fri Jan 21 11:42:27 2011 -0800

Comment puis-je annuler mes 4 commits précédents localement dans une succursale? En d'autres termes, comment puis-je créer une branche sans mes 4 derniers commits (en supposant que j'ai le SHA de ce commit depuis git log)?

Réponses:


234

Pour créer une nouvelle branche (localement):

  • Avec le hachage de validation (ou une partie de celui-ci)

    git checkout -b new_branch 6e559cb
    
  • ou pour revenir 4 commits depuis HEAD

    git checkout -b new_branch HEAD~4
    

Une fois votre nouvelle branche créée (localement), vous souhaiterez peut-être répliquer cette modification sur une télécommande du même nom: Comment puis-je pousser mes modifications vers une branche distante


Pour annuler les trois derniers commits , voir la réponse de Lunaryorn ci-dessous .


Pour déplacer votre branche actuelle HEAD vers le commit spécifié sans créer de nouvelle branche , voir la réponse d'Arpiagar ci-dessous .


160

Toutes les commandes ci-dessus créent une nouvelle branche et le dernier commit étant celui spécifié dans la commande, mais juste au cas où vous voudriez que votre branche actuelle HEADse déplace vers le commit spécifié, voici la commande:

 git checkout <commit_hash>

Il détache et pointe le HEADcommit spécifié et évite de créer une nouvelle branche lorsque l'utilisateur veut simplement voir l'état de la branche jusqu'à ce commit particulier.


Vous voudrez peut-être revenir au dernier commit et corriger le HEAD détaché:

Réparer une tête détachée de Git?


1
Cela détacherait la tête. Pas pratique.
IgorGanapolsky

même si le <commit_hash>est dans une autre branche qui est en avance?
Ciasto piekarz

La question liée dit simplement à git checkout master, à côté d'un ou deux cas extrêmes qui peuvent s'appliquer à certaines situations.
i336_

66

Si vous souhaitez supprimer les quatre derniers commits, utilisez:

git reset --hard HEAD^^^^

Vous pouvez également spécifier le hachage d'un commit sur lequel vous souhaitez réinitialiser:

git reset --hard 6e559cb

4
Cela laisse de côté l'étape de branchement. S'il exécute exactement ce qui est montré ici, il perdra définitivement ces meilleurs commits.
Jimmy Cuadra

3
Eh bien, pas nécessairement de manière permanente - on pourrait récupérer le SHA de la tête précédente git refloget y revenir - mais cela les jetterait, oui.
Amber

1
Si les validations sont poussées en premier, puis réinitialisées, elles peuvent être récupérées à nouveau avec un simple tirage.
Rick Smith

17

Vérifiez simplement le commit à partir duquel vous voulez que votre nouvelle branche commence et créez une nouvelle branche

git checkout -b newbranch 6e559cb95

0

Comment puis-je annuler mes 4 commits précédents localement dans une succursale?

Ce qui signifie que vous ne créez pas de nouvelle branche et ne passez pas à l'état détaché. La nouvelle façon de faire est:

git switch --detach revison

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.