【问题标题】:get name of current branch to use for script获取当前分支的名称以用于脚本
【发布时间】:2018-01-14 23:40:28
【问题描述】:

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

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

我还想删除当前分支。

我知道结帐时存在速记, git checkout - 允许你去你以前的分支,所以我想要的是类似 git branch -D - 的东西,但它不存在。

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

【问题讨论】:

    标签: git bash terminal


    【解决方案1】:

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

    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
    

    所以我们可以用git symbolic-ref替换shell函数,如果shell在分离HEAD模式下应该打印错误:

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

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


    除此之外,我还建议完全避免git pull1 并检查索引和/或工作树是否干净。请参阅$(git --exec-path)/git-sh-setup 以了解在 Git 脚本中使用的一系列 shell 脚本项。例如,shell 函数 require_clean_work_tree 在这里很有用。


    1您几乎总是希望运行git fetch,然后仔细检查提取结果,而不是运行git pull。像git pull 所做的那样,仅仅将结果放入合并或变基操作中,在脚本中很少做正确的事情。

    【讨论】:

    • 是的,存储在变量中正是我想要的。我只是不知道这是否是我要找的。感谢您的解释和其他附加信息。我只是开始在我的工作流程中使用脚本,所以这真的很有用。
    猜你喜欢
    • 2022-06-16
    • 2015-05-14
    • 2017-08-11
    • 2013-09-10
    • 2017-09-09
    • 2013-10-20
    • 2023-03-09
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多