我使用一个中间的 Git 存储库来镜像一个远程 SVN 存储库,人们可以从中克隆和处理这个存储库。中间存储库的主分支每晚都从上游 SVN 重新定位,我们正在处理特性分支。例如:
remote:
master
local:
master
feature
我可以成功地将我的特性分支推回到遥控器,并以我所期望的结果结束:
remote:
master
feature
local:
master
feature
然后,我重新设置分支来跟踪远程:
remote:
master
feature
local:
master
feature -> origin/feature
一切都很好。我想从这里做的是将特性分支重新基于远程的主分支,但是我想在本地机器上完成这项工作。我希望能够做到:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
使远程特性分支与远程主机保持最新。然而,这种方法导致 Git 抱怨:
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
git pull
可以做到这一点,但会导致合并提交,这是我希望避免的。我关心的是,消息指定的是 feature -> feature
而不是 feature -> origin/feature
,但这可能只是一个演示的事情。
我是不是错过了什么,或者我的方式完全错了?避免在远程服务器上执行 rebase 并不重要,但是这会使修复 rebase 中的任何合并冲突变得更加困难。