我正在写一个Bash脚本,我想签出一个标签,然后结账回到我开始的地方。
我尝试了git co HEAD@{1}
,但是当我从master开始时,这会让我回到master的提交SHA但是头部没有了。
是否有像pushd
& Git popd
?
答案 0 :(得分:24)
git checkout @{-1}
,可以缩写为git checkout -
。
作为特例,使用“@ { - 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
就是这样。