我目前正在分支机构工作,希望用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)
要完成变革,需要做什么?
答案 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已经结束。它唯一说的是crtdev
和origin/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
的结果。问题是,如果已经有基于分支的其他工作,它仍将基于它的旧版本。虽然可以在新版本上对其进行重新定义,但很容易忘记并做错事,并且对于毫无戒心的同事来说非常困惑。