如何知道是否有git rebase正在进行?

当我启动git rebase -i ,我可以发出像git rebase --continuegit rebase --abort 。 这些命令仅在正在进行变形时才起作用。

我怎样才能知道是否有进行中的改版?

(我会非常感谢一些关于rebase如何在内部工作的细节; git对一个回购有什么作用,使得它具有“正在发生变化”的状态,?)


首先,在rebase期间有一个ORIG_HEAD (但不限于rebase命令)

但是你也可以看看2010年的Git 1.7.0 git-rebase.sh脚本 (它可以像内部一样);)。
像这些线可以给你另一个线索:

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

sabgenton评论:

  • rebase-apply文件夹似乎与rebase一起出现,
  • 但文件夹重新rebase-merge仅与rebase -i
  • 嬉皮士还在2017年评论说:

    编码指南不鼓励使用-o (请参阅Documentation/CodingGuidelines ),所以现在(2017,但也从2011年开始,Git 1.7.6)的正确方法是:

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

    Jelaby在评论中建议:

    (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季度)将会在转换期间打印更多信息:

    请参阅提交592e412,提交84e6fb9(2015年7月6日),提交84e6fb9(2015年7月6日),并提交guillaumePagès( gitster )提交df25e94,提交05eb563(2015年6月30日)。
    (由Junio C gitster合并 - gitster - 在提交178d2c7,2015年8月3日)

    status :在rebase -i期间提供更多信息

    git status会在rebase -i期间提供更多信息,介绍在rebase -i期间完成的命令列表。
    它显示:

  • 最后执行的两条命令
  • 接下来的两行将被执行。
  • 它还提供了在.git目录中查找整个文件的提示。


    您还可以在contrib/completion/git-prompt.sh中的__git_ps1函数中检查这种检测方式, __git_ps1函数可用于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
    

    如果你有EasyGit, eg status会告诉你:

    $ eg status
    (Not currently on any branch.)
    (YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.)
    Changes ready to be committed ("staged"):
        modified:   .gitmodules
        renamed:    config_loader.rb -> code/config_loader.rb
    Newly created unknown files:
        vendor/
    (YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.)
    

    在彩色终端中,通知非常突出:

    <code>例如状态</ code>中间的rebase示例截图

    eg help topic middle-of-rebase显示文档“如何解决或中止未完成的重新分配”。)

    链接地址: http://www.djcxy.com/p/36245.html

    上一篇: How to know if there is a git rebase in progress?

    下一篇: Undo delete in GIT