Show current git interactive rebase operation

后端 未结 2 909
无人及你
无人及你 2021-01-04 22:17

When in the middle of an interactive rebase, e.g. git rebase -i HEAD~12 and adding/editing some commits, I\'m often confused as to which commit I\'m editing, es

2条回答
  •  时光说笑
    2021-01-04 23:17

    If you have a conflict, you can run git show to see the last applied commit.

    Then when opening your conflicting file, the conflict will show in one hand the state of the file at the last applied commit, and on the other hand the state of the file at the commit currently being applied.

    Example:

    I created a repo with a file "a". My first commit was to create the file:

    John@debian-John: ~/tmp/test (master #) ✖ (1)
    > touch a
    John@debian-John: ~/tmp/test (master #) ✔
    > git add a
    John@debian-John: ~/tmp/test (master +) ✔
    > git commit -m initial
    [master (root-commit) 298299e] initial
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 a
    

    Then, I modified the file and commited it as "commit1":

    John@debian-John: ~/tmp/test (master) ✔
    > echo aaa >a
    John@debian-John: ~/tmp/test (master *) ✔
    > git add a
    John@debian-John: ~/tmp/test (master +) ✔
    > git commit -m commit1
    [master 90b49f8] commit1
     1 file changed, 1 insertion(+)
    

    Then, done it again for a commit "commit2":

    John@debian-John: ~/tmp/test (master) ✔
    > echo bbb >>a
    John@debian-John: ~/tmp/test (master *) ✔
    > git add a
    John@debian-John: ~/tmp/test (master +) ✔
    > git commit -m commit2
    [master 14d798e] commit2
     1 file changed, 1 insertion(+)
    

    Then I rebased to remove commit1:

    John@debian-John: ~/tmp/test (master) ✔
    > git rebase -i HEAD^^
    Auto-merging a
    CONFLICT (content): Merge conflict in a
    error: could not apply 14d798e... commit2
    
    When you have resolved this problem, run "git rebase --continue".
    If you prefer to skip this patch, run "git rebase --skip" instead.
    To check out the original branch and stop rebasing, run "git rebase --abort".
    
    Recorded preimage for 'a'
    Could not apply 14d798e... commit2
    

    Commit2 could not be applied because its context changed (commit1 missing). Please note the error: could not apply 14d798e... commit2 which has the hash of commit2. While in the conflict, if I run git show, I get:

    John@debian-John: ~/tmp/test (master *+|REBASE-i 1/1) ✖ (1)
    > git show
    commit 298299e3fb4e75c50aaa346c9f57c3b8885726f7 (HEAD)
    Author: John Doe 
    Date:   Fri Jul 21 15:59:01 2017 +0100
    
        initial
    
    diff --git a/a b/a
    new file mode 100644
    index 0000000..e69de29
    John@debian-John: ~/tmp/test (master *+|REBASE-i 1/1) ✔
    > git status
    interactive rebase in progress; onto 298299e
    Last command done (1 command done):
       pick 14d798e commit2
    No commands remaining.
    You are currently rebasing branch 'master' on '298299e'.
      (fix conflicts and then run "git rebase --continue")
      (use "git rebase --skip" to skip this patch)
      (use "git rebase --abort" to check out the original branch)
    
    Unmerged paths:
      (use "git reset HEAD ..." to unstage)
      (use "git add ..." to mark resolution)
    
        both modified:   a
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    And the content of a is:

    John@debian-John: ~/tmp/test (master +|REBASE-i 1/1) ✔
    > cat a
    <<<<<<< HEAD
    =======
    aaa
    bbb
    >>>>>>> 14d798e... commit2
    

    Where HEAD is the last commit applied (initial) and the second part is the commit which failed to be applied.

    I hope it will help.

提交回复
热议问题