无法完成Git Rebase

时间:2014-03-17 05:14:29

标签: git git-rebase

我目前正在分支机构工作,希望用master更新它。所以我试着做一个改变。

我正在进行的当前分支:crtdev

我尝试过像rebase一样的

git checkout crtdev
git rebase master
// used diff mergetool to solve merge issues
git rebase --continue

现在说,应用:"我在该分支中完成的所有提交消息"

但之后需要做什么?

我检查了回购并且没有任何更改,当我说git status时,我看到合并的文件出现在filename.html.orig

- 修改 当我运行git rebase --continue时,我收到此消息没有正在进行的转换?

通过运行Git status,我看到了此消息

# On branch crtdev
# Your branch and 'origin/crtdev' have diverged,
# and have 33 and 8 different commits each, respectively.
#   (use "git pull" to merge the remote branch into yours)

要完成变革,需要做什么?

1 个答案:

答案 0 :(得分:9)

rebase 完成。

# On branch crtdev
# Your branch and 'origin/crtdev' have diverged,
# and have 33 and 8 different commits each, respectively.
#   (use "git pull" to merge the remote branch into yours)

看,它没有说明正在进行的rebase。 rebase已经结束。它唯一说的是crtdevorigin/crtdev已经发生了分歧,但这正是它应该在一次变基之后所说的。

您已在crtdev上对master进行了变更。这意味着您已放弃crtdev的旧历史记录,并在master上重新创建了该历史记录。但是origin/crtdev是一个单独的引用,仍然指向旧的历史。您的历史现在看起来像:

X--Y--Z...--master
 \             \
  \             A'--B'--C'--D'--E'--F'--crtdev
   \
    A--B--C--D--E--F--origin/crtdev

版本A' - crtdev执行与A - origin/crtdev相同的更改(没有解决冲突),但它们是新的更改。因为它们还包含来自master中的新更改,并且git中的提交ID是其内容的校验和。

现在如果没有其他人基于origin/crtdev ,那么您只想推出新的历史记录。 git push -f(分支名称匹配,因此不需要参数;完整命令将是git push -f origin crtdev:crtdev)。

但是,如果某人已使用过origin/crtdev,那么您做错了。您应该丢弃rebase(git reset --hard origin/crtdev)和merge的结果。问题是,如果已经有基于分支的其他工作,它仍将基于它的旧版本。虽然可以在新版本上对其进行重新定义,但很容易忘记并做错事,并且对于毫无戒心的同事来说非常困惑。