有没有办法在交互式rebase期间找到正在重新分支的分支的名称,这比解析.git/rebase-merge/head-name
更好?
通常我使用git rev-parse --abbrev-ref HEAD
来获取分支名称。但是在rebase期间,分支处于分离头状态,并且rev-parse返回HEAD
。
所以现在我正在解析.git/rebase-merge/head-name
文件(如果存在)以提取分支名称。是否有方法(瓷器或其他方法)来获取这些数据?
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
为什么我要这样做?
我存储有关分支的元数据并在我的commit-msg
挂钩中获取它以附加到我的提交消息。我想在交互式rebase期间reword
或edit
我的提交消息时使用它。
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
答案 0 :(得分:2)
有没有办法在交互式rebase期间找到正在重新分支的分支的名称,这比解析.git / rebase-merge / head-name更好?
请注意,使用Git 2.18(2018年第二季度),在“git branch --list
”中断期间,“rebase -i
”现在可以让用户区分分离的HEAD
被重新定位的情况和正常情况分支正在重新定位。
所以你仍然需要解析,但命令本身的输出现在很有用。
commit 1f537be见Eric Sunshine (sunshineco
)(2018年4月3日)
commit a236f90见Kaartic Sivaraam (sivaraam
)(2018年4月3日)
(Junio C Hamano -- gitster
--合并于commit 4cbaa6b,2018年4月25日)
时打印有用的信息
branch --list
:在交互式重新定位分离的HEAD以交互方式(
rebase -i
)进行折扣时,会打印“git branch --list
” 表示当前分支正在重新定位的一行 当本地分支启动交互式rebase时,这很有效 检查出来。当在分离的HEAD上启动rebase时,这不能很好地发挥作用 当“
git branch --list
”尝试打印相关信息时 在这种情况下,它会尝试打印名称 使用未初始化的变量的分支,因此尝试 打印“null pointer string
” 因此,它不会提供有用的信息,同时也会导致不确定的行为。因此,打印交互时启动rebase的点 重新定位一个独立的HEAD。
答案 1 :(得分:2)
尽管git branch --list
显示了一个分支名称(有关详细信息,请参见this answer),但是在脚本编写过程中它并没有用,因为您需要解析输出。
我使用以下函数来获取分支名称(基于head-name
文件):
rebasing-branch() {
for location in rebase-merge rebase-apply; do
path=$(git rev-parse --git-path ${location})
if test -d ${path}; then
revision=$(<${path}/head-name)
echo ${revision##refs/heads/}
return 0
fi
done
}
它显示了在定期或交互式重新定位期间的分支名称。