web-dev-qa-db-fra.com

Est-il possible de git checkout branche précédente?

Je veux en quelque sorte l'équivalent de cd - pour git. Si je suis dans la branche master et que je paie foo, j'aimerais pouvoir taper quelque chose comme git checkout - pour revenir à master et pouvoir le saisir à nouveau pour revenir à foo.

Est-ce que quelque chose comme ça existe? Serait-ce difficile à mettre en œuvre?

513
Matt Briggs

De la notes de version de 1.6.2

@{-1} est un moyen de faire référence à la dernière branche sur laquelle vous étiez. C'est
accepté non seulement lorsqu'un nom d'objet est attendu, mais n'importe où un Le nom de la branche est attendu et agit comme si vous aviez tapé le nom de la branche.
Par exemple. git branch --track mybranch @{-1}, git merge @{-1} et
git rev-parse --symbolic-full-name @{-1} fonctionnerait comme prévu.

et

git checkout - est un raccourci pour git checkout @{-1}.

902
Karl Bielefeldt

Le moyen le plus simple de le faire aujourd'hui est:

git checkout -

... qui est un alias de:

git checkout @{-1}

 git checkout minus

Si vous voulez en savoir plus à ce sujet, j'ai écrit un article entier à ce sujet ici: Checkout The Previous Branch In Git .

136
marcgg

Comme @Karl le fait remarquer et à partir du manuel git checkout:

Dans un cas particulier, la syntaxe "@ {- N}" de la N-ème dernière branche vérifie hors de la branche (au lieu de se détacher). Vous pouvez également spécifier - qui est synonyme de "@ {- 1}".

Donc, git checkout - et git checkout @{-1} fonctionneraient dans ce cas

Je pense que le plus proche utilise le git reflog et analyse les derniers moving from branch1 to branch2 et git checkout branch1

24
manojlds

Ajoutez simplement plus de détails aux réponses précédentes pour comprendre le mécanisme par lequel git checkout @{-N} fonctionne. Il parcourt le répertoire pour consulter l'historique de paiement, donc si vous souhaitez implémenter vous-même quelque chose de similaire, vous devriez être en mesure d'analyser le résultat de git reflog à la recherche de lignes checkout:. Vous pouvez vérifier l'implémentation dans la source git sha1_name.c, en particulier la fonction interpret_nth_prior_checkout.

10
ddd

J'ai atterri à cette question avec la même pensée pour vérifier ma branche précédente. J'utilise ohmyz in Mac. Sous la commande m'a aidé.

$ gco -
$ git checkout -
3
Venkat.R

Voici des liens vers les parties de la documentation de Git décrivant les solutions git checkout - et git checkout @{-1} données par les autres réponses:

  • Lorsque vous spécifiez une révision Git pour une commande, @{-<n>}, par exemple. @{-1} signifie “la n ème branche/commit extrait avant l'actuel.” La documentation de git checkout <branch> réitère: “Vous pouvez utiliser la syntaxe @{-N} pour faire référence au N -La dernière branche/validation extraite à l'aide de l'opération git checkout. ”

  • Pour l’argument <branch> DE git checkout , «vous pouvez également spécifier« - », qui est synonyme de« @{-1} ».»

0
Rory O'Kane

La version Git 2.23 a introduit la commande git switch que vous pouvez utiliser pour faire cela (et plus encore). Citation de la documentation officielle:

Basculer vers une branche spécifiée. L'arbre de travail et l'index sont mis à jour pour correspondre à la branche. Tous les nouveaux commits seront ajoutés à la pointe de cette branche.

Dans votre cas spécifique, vous pouvez émettre git switch - pour revenir à la branche dans laquelle vous vous trouviez précédemment. Vous pouvez exécuter la même commande à nouveau pour revenir à la première branche.

P.S. Ce n’est pas que vous ne sachiez pas déjà comment faire cela (je veux dire, cela fait 7 ans que vous avez posé cette question), mais cette commande est moins déroutante et conviviale pour les débutants car elle s’adresse à un problème commun confusion lorsqu’on utilise git checkout.

0
Mike

La solution la plus populaire est:

git checkout @{-N}

Où N - nombre de pas des branches pour revenir à l'historique de paiement.

0
Jackkobec