代码之家  ›  专栏  ›  技术社区  ›  Olivier Verdier

如何知道Git-Rebase是否正在进行中?

  •  60
  • Olivier Verdier  · 技术社区  · 14 年前

    当我开始 git rebase -i ,我可以发出如下命令 git rebase --continue git rebase --abort . 这些命令仅在正在执行一个REBASE时才起作用。

    我怎么知道是否有正在进行的重新平衡?

    (我非常感谢有关REBASE如何在内部工作的一些详细信息;Git对使其处于“REBASE进行中”状态的回购做了什么,…)

    6 回复  |  直到 6 年前
        1
  •  46
  •   Ondra Žižka David Lilljegren    7 年前

    一方面, there is a ORIG_HEAD 在REBASE期间就位(但不限于REBASE命令)

    但你也可以看看2010年的1.7.0吉特 git-rebase.sh script 自身(这是您可以得到的“内部的”)。
    像这样的线可以给你另一个线索:

    dotest="$GIT_DIR"/rebase-merge
    test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || die "No rebase in progress?"
    

    sabgenton comments :

    • 文件夹 rebase-apply 似乎出现在 rebase ,
    • 但是文件夹 rebase-merge 只显示与 rebase -i .

    hippy comments 2017年:

    编码准则不鼓励使用 -o (见 Documentation/CodingGuidelines )所以正确的方法 now (2017, but also since 2011, Git 1.7.6) 是:

    (test -d ".git/rebase-merge" || test -d ".git/rebase-apply") || die "No rebase in progress?"
    

    Jelaby 建议 in the comments :

    (test -d "$(git rev-parse --git-path rebase-merge)" || \
     test -d "$(git rev-parse --git-path rebase-apply)" )
    

    这可以正确处理工作树和不具有 .git 目录,还允许您从工作目录的子目录运行此测试。

    那是因为 git rev-parse --git-path <path> :是否解决“ $GIT_DIR/<path> “。


    Git 2.6+(2015年第3季度)将在重新设定期间打印更多信息:

    commit 592e412 , commit 84e6fb9 (06月2015日) 提交84E6FB9 (2015年7月6日),以及 commit df25e94 , commit 05eb563 (2015年6月30日) Guillaume Pagès ( gitster ) .
    (合并) Junio C Hamano -- gitster -- 在里面 commit 178d2c7 ,03八月2015日)

    status :期间提供更多信息 ReBase-Ⅰ

    git status 提供更多信息 ReBase-Ⅰ ,关于在REBASE期间执行的命令列表。
    它显示:

    • 执行的最后两个命令和
    • 接下来要执行的两行。

    它还提供了在 Git 目录。

        2
  •  16
  •   Benjamin W.    7 年前

    您还可以检查如何在 __git_ps1 function in contrib/completion/git-prompt.sh ,可用于Git-Aware bash提示:

                    if [ -f "$g/rebase-merge/interactive" ]; then
                            r="|REBASE-i"
                            b="$(cat "$g/rebase-merge/head-name")"
                    elif [ -d "$g/rebase-merge" ]; then
                            r="|REBASE-m"
                            b="$(cat "$g/rebase-merge/head-name")"
                    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
    
        4
  •  3
  •   Rory O'Kane Erce    12 年前

    如果有一个交互式钢筋网正在进行中,这将告诉您您正在进行中:

    $ cat .git/rebase-merge/done 
    pick 786139e lrg
    edit 668b8a6 ktio
    $ 
    

    现在我正在编辑一个交互式的基片中的ktio补丁。

    如果没有重新平衡,它将如下所示:

    $ cat .git/rebase-merge/done 
    cat: .git/rebase-merge/done: No such file or directory
    $ 
    
        5
  •  2
  •   Alexander Bird    10 年前

    从bash命令行:

    ls `git rev-parse --git-dir` | grep rebase
    

    如果有一个REBASE文件夹,它将返回退出代码0(成功),并将REBASE文件夹输出到stdout。如果你是 在一个REBASE中间,它将不输出任何内容并返回非0退出代码。所以你甚至可以这样做:

    ls `git rev-parse --git-dir` | grep rebase || echo no rebase
    
        6
  •  1
  •   BILL    6 年前

    我正在使用这个命令 is_rebase=$(git status | grep "rebasing" | wc -l)