How to know if there is a git rebase in progress?

When I start a git rebase -i , I can issue commands like git rebase --continue , or git rebase --abort . Those commands only work if a rebase is in progress.

How can I know if there is a rebase in progress?

(I would greatly appreciate some details on how rebase works internally; what does git do to a repo that gives it the "rebase in progress" status,?)


For one thing, there is a ORIG_HEAD in place during a rebase (but that is not limited to the rebase command)

But you can also look at the 2010 Git 1.7.0 git-rebase.sh script itself (which is as "internal" as you can get ;) ).
Lines like those can give you another clue:

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

sabgenton comments:

  • The folder rebase-apply seems to appear with rebase ,
  • but a folder rebase-merge shows up only with with rebase -i .
  • And hippy also comments, in 2017, that:

    The coding guidelines discourage the usage of -o (see Documentation/CodingGuidelines ), so the correct way now (2017, but also since 2011, Git 1.7.6) is:

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

    Jelaby suggests in the comments:

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

    This correctly handles worktrees and unusual or non-standard layouts that don't have a .git directory, and also allows you to run this test from a subdir of the working directory.

    That is because the git rev-parse --git-path <path> : does resolve " $GIT_DIR/<path> ".


    Git 2.6+ (Q3 2015) will print more information during a rebase:

    See commit 592e412, commit 84e6fb9 (06 Jul 2015), commit 84e6fb9 (06 Jul 2015), and commit df25e94, commit 05eb563 (30 Jun 2015) by Guillaume Pagès ( gitster ).
    (Merged by Junio C Hamano -- gitster -- in commit 178d2c7, 03 Aug 2015)

    status : give more information during rebase -i

    git status gives more information during rebase -i , about the list of commands that are done during the rebase.
    It displays:

  • the last two commands executed and
  • the next two lines to be executed.
  • It also gives hints to find the whole files in .git directory.


    您还可以在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
    

    If you have EasyGit, eg status will tell you:

    $ 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.)
    

    In a colored terminal, the notification is very prominent:

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

    ( eg help topic middle-of-rebase displays the documentation “How to resolve or abort an incomplete rebase”.)

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

    上一篇: 如何恢复一个不必要的“git reset HEAD〜1”

    下一篇: 如何知道是否有git rebase正在进行?