在git重新基址期间查找分支名称 什么?

在git重新基址期间查找分支名称 什么?,git,git-branch,git-rebase,Git,Git Branch,Git Rebase,是否有一种方法可以在交互式重新基址期间找到正在重新基址的分支的名称,这比解析.git/rebase merge/head name更好 细节 通常我使用git rev parse--abbrev ref HEAD来获取分支名称。但在重新基址期间,分支处于分离的头部状态,rev parse返回head 因此,现在我正在解析.git/rebase merge/head name文件(如果存在)以提取分支名称。是否有方法(陶瓷或其他)获取此数据 用法: 为什么? 我为什么要这样做 我存储关于分支的元数

是否有一种方法可以在交互式重新基址期间找到正在重新基址的分支的名称,这比解析
.git/rebase merge/head name
更好

细节 通常我使用
git rev parse--abbrev ref HEAD
来获取分支名称。但在重新基址期间,分支处于分离的头部状态,rev parse返回
head

因此,现在我正在解析
.git/rebase merge/head name
文件(如果存在)以提取分支名称。是否有方法(陶瓷或其他)获取此数据

用法: 为什么? 我为什么要这样做

我存储关于分支的元数据,并在我的
commit msg
hook中获取它以附加到我的提交消息中。我希望在交互式重新基址期间,当
重写
ing或
编辑
ing我的提交消息时,此功能能够正常工作

代码: 有没有比解析.git/rebase merge/head name更好的方法来查找在交互式重新基址期间重新基址的分支的名称

请注意,在Git 2.18(2018年第2季度)中,在中断的“
rebase-i
”期间,“Git branch--list”现在让用户能够区分分离的
正在被重基和正常分支正在被重基的情况

所以您仍然需要解析,但是命令本身的输出现在很有用

参见(2018年4月3日)作者。
参见(2018年4月3日)作者。
(于2018年4月25日合并)

branch--list
:打印有用信息,同时对分离的磁头进行交互式重定基址 以交互方式重新设置基址(
rebase-i
)时,将打印“
git分支--list
” 一条线,指示正在重定基准的当前分支。
当本地分支被激活时,当交互式重基被启动时,这将很好地工作 退房了

当在分离的磁头上启动重基时,这不起作用。
当“
git branch--list
”尝试打印相关信息时 在本例中,它将尝试打印名称 使用未初始化变量的分支,因此尝试 打印“
空指针字符串”

因此,它不能提供有用的信息,同时也会导致未定义的行为

因此,打印交互时重新基准开始的点 重新固定分离的头部


我使用以下函数获取分支名称(基于
head name
文件):

rebasing-branch(){
对于重新基准合并中的位置,重新基准应用;执行
path=$(git rev parse--git path${location})
如果test-d${path};那么

revision=$(如果您要在另一个分支上重定一个分支的基址,您有什么理由在交互上下文中这样做吗?
git status
(非-
--ceral
)将告诉你,你是在一个ReBASE中,并显示你的分支名称,如果它是可用的,它从“代码”> ReBASE合并/头名或<代码> RealApple应用程序/头名或<代码> BISECUTION >适当。不要用同样的文件到处乱翻
git status
reads,因为至少你只有一个集中的位置而不是三个。(顺便说一句,你应该使用
git rev parse--git dir
而不是假设
.git
)@torek这很奇怪,它在git状态的友好输出中,但在--Cellar中不可用。另外,++for
--git dir
vs
--show toplevel
+`/.git/')。谢谢。@makoto:我正在以交互方式重新设置,专门用于编辑我(个人)上的提交消息合并前的功能分支。我看到
git分支--edit description
在分离头部时不起作用。有趣的解决方案,不需要解析。向上投票。
git checkout "the_branch_name_I_want"
git rebase -i "some_other_branch_sha_etc"
# mark commit for edit ...
git magic-command # I'd like to get back "the_branch_name_I_want"
git rebase --continue
branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [ "$?" -ne 0 ]; then
    echo "not in a git repo!"
    exit 2
fi
if [ "$branch" = "HEAD" ]; then
    # check if we are in a rebase
    head_name_file="$(git rev-parse --git-dir)/rebase-merge/head-name"
    if [ -f "${head_name_file}" ]; then
        branch=$(cut -f3- -d/ $head_name_file)
    else
        # ignore DETACHED HEAD state.
        exit 1
    fi
fi
## do something with branch