Git pushd& POPD?即,结帐最后状态

时间:2011-03-01 05:36:27

标签: git git-checkout

我正在写一个Bash脚本,我想签出一个标签,然后结账回到我开始的地方。

我尝试了git co HEAD@{1},但是当我从master开始时,这会让我回到master的提交SHA但是头部没有了。

是否有像pushd& Git popd

3 个答案:

答案 0 :(得分:24)

git checkout @{-1},可以缩写为git checkout -

From the manpage:

  

作为特例,使用“@ { - N}”语法   为第N个最后一个分支检查   分支(而不是分离)。您   也可以指定 - 这是同义词   用“@ { - 1}”。

答案 1 :(得分:3)

编辑:如果您不希望以pushd / popd的方式保留明确的历史记录,那么wnoise的建议将会起作用。如果你这样做(并且不希望普通的checkout影响你的LRU):

我不知道有什么可以做你想要的开箱即用的东西,但并不是很难在这些方面进行黑客攻击。如果将名为git-foo的文件添加到PATH,则会获得新的git foo命令。因此,git-pushd可能如下所示:

#!/bin/bash

SUBDIRECTORY_OK=1
. $(git --exec-path)/git-sh-setup

git symbolic-ref HEAD | sed s_refs/heads/__ >> $GIT_DIR/.pushd
git checkout "$@"

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

答案 2 :(得分:0)

在您的脚本中,首先保存当前分支(如this answer所示):

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

然后去检查你想要的标签

git checkout -b tag_branch tag_name

在该分支上执行您想要执行的操作,然后再次检出旧分支:

git checkout $branch_name

就是这样。