618 votes

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

Je consulte parfois une version antérieure du code pour l'examiner ou le tester. J'ai vu des instructions sur ce qu'il faut faire si je souhaite modifier des commits précédents - mais supposons que je ne fasse aucun changement. Après avoir fait par exemple git checkout HEAD^ comment revenir à l'extrémité de la branche git log ne me montre plus le SHA du dernier commit.

15 votes

En ce qui concerne le git log de votre question, vous pouvez toujours exécuter git log --all (ou plus utilement, git log --oneline --graph --all ).

0 votes

En développant le commentaire de @Wildcard, vous pouvez créer un merveilleux alias à partir de cela. git log commandement : git adog

794voto

Novelocrat Points 12126

Si vous savez que le commit auquel vous voulez retourner est la tête d'une branche, ou est étiqueté, alors vous pouvez tout simplement

git checkout branchname

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


Modifié pour ajouter :

Dans les nouvelles versions de Git, si vous exécutez seulement git checkout ou quelque chose d'autre pour déplacer votre HEAD une fois, vous pouvez aussi faire

git checkout -

pour revenir à l'endroit où il se trouvait avant le dernier contrôle. Ceci a été motivé par l'analogie avec l'idiome shell cd - pour revenir au répertoire de travail dans lequel on se trouvait précédemment.

38 votes

Je tiens à préciser que l'exemple typique serait "git checkout master". L'une des difficultés que j'ai rencontrées en apprenant à utiliser git était de ne pas savoir quels mots-clés spécifiques (par exemple "master") je pouvais substituer à des mots de remplacement comme "branchname".

7 votes

master n'est pas vraiment une sorte de mot-clé, de la même façon que HEAD est. C'est juste le nom de la branche par défaut dans un nouveau référentiel. Vous pouvez exécuter git branch pour obtenir une liste des branches de votre dépôt, et git tag -l pour obtenir une liste de balises. De même, origin est le nom par défaut du dépôt distant à partir duquel un dépôt est cloné, mais il n'y a rien de spécial à ce sujet.

3 votes

Si ce n'était pas clair, git reflog vous donne une liste de hachages, à partir de laquelle vous pouvez utiliser git checkout [commit-hash] .

39voto

Bruce Wells Points 11

git checkout master

master est la pointe, ou le dernier commit. gitk ne vous montrera que l'endroit où vous vous trouvez dans l'arbre à ce moment-là. git reflog affichera tous les commits, mais dans ce cas, vous ne voulez que la pointe, donc git checkout master.

5 votes

Ceci. Ou git checkout branchname

21voto

816-8055 Points 1

Je viens de tomber sur cette question 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 montre le journal des commits de toutes les branches locales
-1 limiter à un seul commit → le commit le plus récent
--pretty=format:"%H" format pour ne montrer que le hash de commit
git checkout $(...) utiliser la sortie du sous-shell comme argument pour le checkout

Note :

Il en résultera cependant une tête détachée (parce que nous faisons un checkout directement sur le commit). Ceci peut être évité en extrayant le nom de la branche en utilisant sed expliqué ci-dessous.


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

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

Explication :

git log --branches montre le journal des commits de toutes les branches locales
-1 limiter à un seul commit → le commit le plus récent
--pretty=format:"%D" format pour ne montrer que les noms de réf.
| sed 's/.*, //g' ignorer tout sauf la dernière des multiples références (*)
git checkout $(...) utiliser la sortie du sous-shell comme argument pour le checkout

*) HEAD et les branches distantes sont listées en premier, les branches locales sont listées en dernier dans l'ordre alphabétique décroissant, donc celle qui reste sera le nom de la branche en premier dans l'ordre alphabétique.

Note :

Cela utilisera toujours le premier nom de branche (par ordre alphabétique) s'il y en a plusieurs pour ce commit.


Quoi qu'il en soit, je pense que la meilleure solution serait simplement d'afficher les noms de ref pour le commit le plus récent pour savoir où aller :

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

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

9voto

hothead1000 Points 97

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

git checkout master
git checkout branchname

9voto

tanascius Points 22712

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

0 votes

Oui, c'est en fait la façon dont je l'ai fait dans le passé - mais je n'ai pas l'interface graphique disponible pour le moment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X