Git pushd y popd? Es decir, pago último estado

Estoy escribiendo un guión de Bash, y quiero verificar una label y luego volver al inicio de la página donde comencé.

git co HEAD@{1} , pero cuando empiezo en master, eso me lleva de vuelta al commit SHA de master pero con una cabeza separada.

¿Hay algo como pushd & popd para Git?

git checkout @{-1} que se puede abreviar a git checkout - .

De la página de manual:

Como un caso especial, la syntax "@ {- N}" para la última sucursal N verifica la bifurcación (en lugar de separarse). También puede especificar, que es sinónimo de "@ {- 1}".

EDITAR: la sugerencia de wnoise funcionará si no quiere mantener un historial explícito como lo hace pushd / popd. Si lo hace (y no quiere que un process de checkout ordinario afecte su LRU):

No sé nada que haga lo que quieras de la caja, pero no es difícil armar algo así. Si agrega un file llamado git-foo a su RUTA, obtiene un nuevo command git foo . Entonces, git-pushd podría verse así:

 #!/bin/bash SUBDIRECTORY_OK=1 . $(git --exec-path)/git-sh-setup git symbolic-ref HEAD | sed s_refs/heads/__ >> $GIT_DIR/.pushd git checkout "$@" 

Y git-popd :

 #!/bin/bash SUBDIRECTORY_OK=1 . $(git --exec-path)/git-sh-setup REF=$(head -n1 $GIT_DIR/.pushd) [ -n "$REF" ] || die "No refs to pop" git checkout "$REF" && sed -i -e '1d' $GIT_DIR/.pushd 

En su secuencia de commands, primero guarde la twig actual (como se escribe en esta respuesta ):

 branch_name="$(git symbolic-ref HEAD 2>/dev/null)" || branch_name="(unnamed branch)" # detached HEAD branch_name=${branch_name##refs/heads/} 

luego vaya y revise la label que desea

 git checkout -b tag_branch tag_name 

Haz lo que quieras hacer en esa twig, luego vuelve a verificar la vieja twig:

 git checkout $branch_name 

Eso es.