我正在编写一个 Bash 脚本,我想签出一个标签,然后签出回到我开始的地方。
我试过git co HEAD@{1}
了,但是当从 master 开始时,这让我回到了 master 的提交 SHA,但头却是分离的。
Git有类似pushd
&的东西吗?popd
我正在编写一个 Bash 脚本,我想签出一个标签,然后签出回到我开始的地方。
我试过git co HEAD@{1}
了,但是当从 master 开始时,这让我回到了 master 的提交 SHA,但头却是分离的。
Git有类似pushd
&的东西吗?popd
git checkout @{-1}
可以简写为git checkout -
。
作为一种特殊情况,第 N 个最后一个分支的“@{-N}”语法检出分支(而不是分离)。您也可以指定 - 与“@{-1}”同义。
编辑:如果您不想像 pushd/popd 那样保留明确的历史记录,wnoise 的建议将起作用。如果你这样做(并且不希望普通checkout
影响你的 LRU):
我不知道有什么东西可以开箱即用,但是按照这些思路将某些东西拼凑起来并不难。如果您将一个名为PATH 的文件添加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
在您的脚本中,首先保存当前分支(如在此答案中所写):
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
就是这样。