我正在写一个Bash脚本,我想 checkout 一个标记,然后再签回我开始的地方。我尝试了git co HEAD@{1},但当我从master开始时,这会让我回到master的commit SHA,但我的头已脱落。Git有类似pushd和popd的东西吗?
git co HEAD@{1}
pushd
popd
mec1mxoz1#
git checkout @{-1},可以缩写为git checkout -。From the manpage:升作为一种特殊情况,最后第N个分支的“@{-N}”语法将检出该分支(而不是分离)。您还可以指定-,它与“@{-1}”同义。
git checkout @{-1}
git checkout -
dsekswqp2#
checkout
我不知道有什么能让你从盒子里做你想做的事,但按照这些思路把东西拼凑起来并不难。如果将名为git-foo的文件添加到PATH中,将得到一个新的git foo命令。因此,git-pushd可能看起来像:
git-foo
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:
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
kh212irz3#
在脚本中,首先保存当前分支(如此答案中所写):
branch_name="$(git symbolic-ref HEAD 2>/dev/null)" || branch_name="(unnamed branch)" # detached HEAD branch_name=${branch_name##refs/heads/}
然后去 checkout 你想要的标签
git checkout -b tag_branch tag_name
在该分支上执行您想执行的操作,然后再次 checkout 旧分支:
git checkout $branch_name
就是这样。
szqfcxe24#
您还可以使用别名和**/tmp/gitStack**作为临时文件来跟踪堆栈。查看我制作的主要别名:
[alias] pushd = "!f() { _BRANCH=$(git symbolic-ref head); _BRANCH=${_BRANCH#'refs/heads/'}; echo $_BRANCH >> /tmp/gitStack; git checkout $@;}; f " pop = "!f() { _BRANCH=$(tail -1 /tmp/gitStack); git checkout ${_BRANCH%*:}; head -n+1 /tmp/gitStack > /tmp/_gitStack; mv /tmp/_gitStack /tmp/gitStack; }; f" pop-clear = "!f() { rm /tmp/gitStack; }; f" pop-list = "!f() { cat /tmp/gitStack 2> /dev/null; }; f"
4条答案
按热度按时间mec1mxoz1#
git checkout @{-1}
,可以缩写为git checkout -
。From the manpage:升
作为一种特殊情况,最后第N个分支的“@{-N}”语法将检出该分支(而不是分离)。您还可以指定-,它与“@{-1}”同义。
dsekswqp2#
checkout
影响您的LRU):我不知道有什么能让你从盒子里做你想做的事,但按照这些思路把东西拼凑起来并不难。如果将名为
git-foo
的文件添加到PATH中,将得到一个新的git foo
命令。因此,git-pushd
可能看起来像:和
git-popd
:kh212irz3#
在脚本中,首先保存当前分支(如此答案中所写):
然后去 checkout 你想要的标签
在该分支上执行您想执行的操作,然后再次 checkout 旧分支:
就是这样。
szqfcxe24#
您还可以使用别名和**/tmp/gitStack**作为临时文件来跟踪堆栈。
查看我制作的主要别名: