2017-08-07 57 views
1

我有一个done.sh脚本,只要我在分支上完成工作(在将分支发布到远程repo并将其合并到dev后),就可以调用该脚本。获取用于脚本的当前分支的名称

目前,它仅包含如下: git checkout master && git pull

我想也包括当前分支的删除。

我知道结帐的速记存在, git checkout -可以让你去你的上一个分支,所以我想要的是类似git branch -D -的东西,但这并不存在。

研究#2显示了我如何获得当前分支的名称: git rev-parse --abbrev-ref HEAD但脚本我有办法,我只能用这个checkout后,并没有直接。

回答

1

鉴于您已经包含了该井, -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成壳功能这里,因为这个人是有缺陷的:如果你有一个“分离的头”开始时,你会得到这样的:

$ 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,产生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 

,所以我们可以使用git symbolic-ref更换外壳的功能,如果外壳应在分离的头模式下打印错误:

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

|| exit使得外壳出口(与最后一个命令运行的退出状态,在这种情况下,git symbolic-ref状态);如果命令失败,因此这将要么把目前的分行名称为$cbranch,要不然打印一条消息到stderr并退出。


与所有的出路,我也建议避免git pull完全,和检查索引和/或工作树是否干净。请参阅$(git --exec-path)/git-sh-setup了解一些用于Git脚本的shell脚本项目。例如,shell函数require_clean_work_tree在这里很有用。


而不是运行git pull,你几乎总是要运行git fetch,然后仔细检查的获取结果。只需将结果合并到合并或重新分配操作中,如git pull所做的那样,在脚本中很难做到。

+0

是的,存储在变量中正是我想要的。我只是不知道这是我想要的。感谢您的解释和其他附加信息。我只是开始为我的工作流程使用脚本,所以这非常有用。 – nxmohamad