git:如何轻松判断我是否处于rebase中

我正在编写一个bash单行代码,我想在每次git rebase --continue循环中运行while [ true ]时自动执行某项操作。停止时,如果我仍在进行基础调整,我将执行X,然后要求重新进行基础调整。是否容易判断我是否还在改基地?我尝试使用if [ ! -f .git/REBASE_HEAD ]; then break; fi,但是在完成变基之后文件仍然存在。我看到.git/rebase-merge在重新设置基准时存在,并且在完成后消失了。我可以用它作为小费吗?

daluoxi 回答:git:如何轻松判断我是否处于rebase中

我们可以看到how git-prompt.sh detects being in a rebase

    if [ -d "$g/rebase-merge" ]; then
        if [ -f "$g/rebase-merge/interactive" ]; then
            r="|REBASE-i"
        else
            r="|REBASE-m"
        fi
    else
        if [ -d "$g/rebase-apply" ]; then
            if [ -f "$g/rebase-apply/rebasing" ]; then
                r="|REBASE"
            elif [ -f "$g/rebase-apply/applying" ]; then
                r="|AM"
            else
                r="|AM/REBASE"
            fi
        elif [ -f "$g/MERGE_HEAD" ]; then
            r="|MERGING"
        elif __git_sequencer_status; then
            :
        elif [ -f "$g/BISECT_LOG" ]; then
            r="|BISECTING"
        fi

__git_sequencer_status中还有其他状态。

由于Git目录并不总是.git,因此脚本使用git rev-parse --git-dir获取git目录(上面的$g)。然后,您可以从上面看到哪些目录和文件对应于哪些操作。

将其概括起来,您正在寻找两个目录之一。

  • $g/rebase-merge
  • $g/rebase-apply
,

是的,可以。查看how git-prompt.sh does it来设置您的PS1

if [ -d "$g/rebase-merge" ]; then
    __git_eread "$g/rebase-merge/head-name" b
    __git_eread "$g/rebase-merge/msgnum" step
    __git_eread "$g/rebase-merge/end" total
    if [ -f "$g/rebase-merge/interactive" ]; then
        r="|REBASE-i"
    else
        r="|REBASE-m"
    fi
else
    if [ -d "$g/rebase-apply" ]; then
        __git_eread "$g/rebase-apply/next" step
        __git_eread "$g/rebase-apply/last" total
        if [ -f "$g/rebase-apply/rebasing" ]; then
            __git_eread "$g/rebase-apply/head-name" b
            r="|REBASE"
        elif [ -f "$g/rebase-apply/applying" ]; then
            r="|AM"
        else
            r="|AM/REBASE"
        fi
本文链接:https://www.f2er.com/2816348.html

大家都在问