2015-06-14 60 views
0

我在分支b4上做“$ git rebase master”,它给了我冲突。为什么rebasing未设置当前分支并未完成?

$ 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”,它没有完整的底垫,而是给了我更多的“指令”。为什么?

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

回答

2

我固定的冲突,并承诺改变:

这就是你出了问题。 git rebase --continue预计这些更改将位于索引中,但尚未提交。由于您已经提交了更改,因此git rebase自己的尝试失败,因为没有任何更改需要执行。

您应该能够通过运行git reset --soft @^来撤消您的提交操作,而无需重置索引。在此之后应该可以使用git rebase --continue

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

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

相关问题