web-dev-qa-db-fra.com

Comment revenir au dernier commit après avoir extrait un commit précédent?

Je vérifie parfois une version précédente du code à examiner ou à tester. J'ai vu des instructions sur la marche à suivre si je souhaite modifier les commits précédents - mais supposons que je ne fasse aucun changement. Après avoir terminé, par exemple git checkout HEAD^, comment puis-je revenir au sommet de la branche? .. git log ne me montre plus le SHA du dernier commit.

367
Leo Alekseyev

Si vous savez que le commit sur lequel vous souhaitez retourner est la tête d’une branche ou est marqué, alors vous pouvez simplement

git checkout branchname

Vous pouvez également utiliser git reflog pour voir les autres commits que votre HEAD (ou toute autre référence) a pointés dans le passé.


Édité pour ajouter:

Dans les versions plus récentes de Git, si vous n'avez exécuté que git checkout ou autre chose pour déplacer votre HEAD une fois, vous pouvez également le faire. 

git checkout -

pour revenir à l'endroit où il était avant la dernière commande. Cela a été motivé par l'analogie avec l'idiome de shell cd - pour revenir au répertoire de travail dans lequel il se trouvait auparavant.

477
Phil Miller

git checkout master

master est la pointe, ou le dernier commit. gitk ne vous montrera que votre position actuelle dans l’arbre. git reflog affichera tous les commits, mais dans ce cas, vous voulez juste le conseil, alors git checkout master.

22
Bruce Wells

Je suis tombé sur cette question tout à l'heure et j'ai quelque chose à ajouter

Pour aller au commit le plus récent:

git checkout $(git log --branches -1 --pretty=format:"%H")

Explication:

git log --branches affiche le journal des commits de toutes les branches locales
-1 limite à un commit → dernier commit
Format .____--pretty=format:"%H" pour afficher uniquement le hachage de validation
git checkout $(...) utilise la sortie du sous-shell comme argument de sortie

Remarque:

Cela entraînera cependant un détachement de la tête (car nous passons directement à la validation). Cela peut être évité en extrayant le nom de la branche en utilisant sed, expliqué ci-dessous.


Pour aller à la branche du plus récent commit:

git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')

Explication:

git log --branches affiche le journal des commits de toutes les branches locales
-1 limite à un commit → dernier commit
--pretty=format:"%D" format pour afficher uniquement les noms de référence
| sed 's/.*, //g' ignore tout sauf le dernier des multiples refs (*)
git checkout $(...) utilise la sortie du sous-shell comme argument de sortie

*) HEAD et les branches distantes sont listés en premier, les branches locales sont listées en dernier par ordre alphabétique décroissant, ainsi celui qui reste sera le nom alphabétique de la première branche

Remarque:

Cela utilisera toujours uniquement le nom de la première branche (par ordre alphabétique) s'il y en a plusieurs pour cette validation.


Quoi qu’il en soit, je pense que la meilleure solution serait simplement d’afficher les noms des références pour le dernier engagement, afin de savoir où acheter:

git log --branches -1 --pretty=format:'%D'

Par exemple. créez l'alias git top pour cette commande.

16
816-8055

Jetez un coup d'œil à l'interface graphique ... gitk, elle montre tous les commits. Parfois, il est plus facile de travailler graphiquement ... ^^

9
tanascius

Vous pouvez utiliser l'une des commandes git suivantes pour cela:

git checkout master
git checkout branchname
6
hothead1000

afficher toutes les branches et commettre 
git log --branches --oneline

afficher le dernier commit 
git log --branches -1 --oneline

montrer avant le dernier commit 
git log --branches -2 --oneline

0
abdesselam

Si vous avez une branche différente de celle du maître, un moyen simple est de vérifier cette branche, puis de vérifier maître. Voilà, vous êtes de retour à la pointe du maître. Il y a probablement des moyens plus intelligents ...

0
ConorR
git reflog //find the hash of the commit that you want to checkout
git checkout <commit number>>
0
Atif Majeed