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?
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}
etgit rev-parse --symbolic-full-name @{-1}
fonctionnerait comme prévu.
et
git checkout -
est un raccourci pourgit checkout @{-1}
.
Le moyen le plus simple de le faire aujourd'hui est:
git checkout -
... qui est un alias de:
git checkout @{-1}
Si vous voulez en savoir plus à ce sujet, j'ai écrit un article entier à ce sujet ici: Checkout The Previous Branch In Git .
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
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
.
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 -
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}
».»
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
.
La solution la plus populaire est:
git checkout @{-N}
Où N - nombre de pas des branches pour revenir à l'historique de paiement.