为什么rebasing取消设置我当前的分支并且没有完成?

时间:2015-06-14 20:03:39

标签: git rebase

我在分支b4上做“$ git rebase master”,它给了我冲突。

 $ git rebase master
    First, rewinding head to replay your work on top of it...
    Applying: rebase: Modified 1.txt
    Using index info to reconstruct a base tree...
    M       1.txt
    Falling back to patching base and 3-way merge...
    Auto-merging 1.txt
    CONFLICT (content): Merge conflict in 1.txt
    Failed to merge in the changes.
    Patch failed at 0001 rebase: Modified 1.txt
    The copy of the patch that failed is found in:
       c:/hands_on/github/learn_git/cmd/.git/rebase-apply/patch

    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".

在这里,它显示我不再在分支b4上。

 $ git status
    # Not currently on any branch.
    # You are currently rebasing.
    #   (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 <file>..." to unstage)
    #   (use "git add <file>..." to mark resolution)
    #
    #       both modified:      1.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")

我修复了冲突并提交了更改:

$ vim 1.txt

$ git commit -a -m "Fixed rebase conflict"
[detached HEAD 2cb2672] Fixed rebase conflict
 1 file changed, 1 insertion(+)

$ git status
# Not currently on any branch.
# You are currently rebasing.
#   (all conflicts fixed: run "git rebase --continue")
#
nothing to commit, working directory clean

但是当我尝试“ - continue”时,它没有完成rebase,而是给了我更多的“指令”。为什么呢?

$ git rebase --continue
Applying: rebase: Modified 1.txt
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

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".

1 个答案:

答案 0 :(得分:2)

  

我修复了冲突并提交了更改:

那是你出错的地方。 git rebase --continue期望更改在索引中,但尚未提交。由于您已经提交了更改,git rebase自己的尝试失败,因为没有任何更改可以提交。

您应该能够通过运行git reset --soft @^撤消提交操作,而无需重置索引。 git rebase --continue应该在那之后工作。

您也可以使用git rebase --skip来绕过git rebase自己提交更改的尝试,但是这会冒更多的混乱:您自己的提交很可能不会尊重原始提交作者姓名,电子邮件和时间。

git status显示您不在任何分支上的事实不是问题。 git rebase故意从当前分支分离,直到操作完成。这将在操作成功后修复。