获取用于脚本的当前分支的名称

时间:2017-08-07 15:36:25

标签: git bash terminal

我有一个 done.sh 脚本,每当我完成分支工作时(在将分支发布到远程仓库并将其合并到dev中之后),我会调用该脚本。

目前它只包含以下内容: git checkout master && git pull

我还希望删除当前分支。

我知道收银台有简写, git checkout -允许您转到上一个分支,因此我想要的是git branch -D -,但不存在。

Stackoverflow研究向我展示了如何获取当前分支的名称: git rev-parse --abbrev-ref HEAD但我拥有的脚本意味着我只会在checkout之后使用此内容,而不是直接使用此内容。

1 个答案:

答案 0 :(得分:1)

鉴于您已经包含了-well, -answer,我不确定您的实际问题是什么。也许是关于在脚本中使用变量?

get_current_branch() {
    git rev-parse --abbrev-ref HEAD
}

cbranch=$(get_current_branch)
git checkout master && git pull
do_something_with $cbranch

我将get_current_branch放入shell 函数,因为这个有缺陷:如果你从一个“分离的HEAD”开始,你会得到这个:

$ git checkout --detach master
HEAD is now at 4384e3cde... Git 2.14
Your branch is up-to-date with 'origin/master'.
$ git rev-parse --abbrev-ref HEAD
HEAD

以便$cbranch结束HEAD

替代方法是使用git symbolic-ref,当您处于此分离的HEAD模式时,它会在stderr上生成fatal: ...错误消息,并且没有分支名称:

$ git symbolic-ref --short HEAD
fatal: ref HEAD is not a symbolic ref

重新回到master,但是:

$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git symbolic-ref --short HEAD
master

因此,如果shell在处于分离的HEAD模式时应该打印错误,我们可以使用git symbolic-ref替换shell函数:

cbranch=$(git symbolic-ref --short HEAD) || exit

如果命令失败,|| exit使shell退出(运行最后一个命令的退出状态,在本例中为git symbolic-ref状态),因此这将放置当前分支名称进入$cbranch,或者将消息打印到stderr并退出。

完成所有这些后,我还建议完全避免git pull 1 并检查索引和/或工作树是否干净。有关要在Git脚本中使用的一组shell脚本项,请参阅$(git --exec-path)/git-sh-setup。例如,shell函数require_clean_work_tree在这里很有用。

1 而不是运行git pull,您几乎总是想运行git fetch,然后仔细检查获取的结果。正如git pull所做的那样,将结果抨击为合并或rebase操作,在脚本中很少是正确的做法。