将远程分支的指针从一个分支移动到另一个分支

9

我做了一个rebase --onto操作,将之前的提交(c4)从主分支移动到一个功能分支。但是我已经将主分支推送到远程仓库。

所以现在我的情况是:

c1 - c2 - c3 - c5(master HEAD)
           \
            c4(feature HEAD) - c5(origin/master HEAD)

我意识到修复此问题将干扰任何已从origin/master提取更改的人。但只有另一位开发人员,因此这不是太大的问题。我如何更改origin/master,使其不在功能分支之后。我希望它是这样的:

c1 - c2 - c3 - c5(master HEAD)(origin/master HEAD)
           \
            c4(feature HEAD)

你的配置允许你删除 origin/master 吗?也许问题就这么简单。 - isherwood
我对远程仓库有完全的访问权限,这是我的代码库。因此,我可以做任何必要的操作。但如果有一种解决方案不需要删除origin/master,那可能是对这个问题最好的答案。 - Sean Lynch
如果我要删除 origin/master,我只需要删除该远程分支,将其添加为 master 的跟踪分支,然后执行 git -f push。这样正确吗? - Sean Lynch
也许只需要执行 git push origin :master,然后再执行 git push。不应该需要强制推送。 - isherwood
1个回答

16

使用在主分支(master)强制推送到远程仓库的主分支(origin/master):

git push origin master:master --force

另一位开发者需要在完成工作后将自己的主分支重置到远程主分支(最好在保存了他的工作后进行硬重置):

git fetch origin
git checkout master
git reset --hard origin/master

我不理解 master:master 这个语法。你能详细说明一下吗? - Sean Lynch
@SeanLynch 的意思是:将主分支(第一个)推送到远程仓库的主分支(第二个)。 - TimWolla
当我这样做时,我会得到“拒绝非快进引用/heads/master(应先拉取)”。我不想这样做,因为那样c4将被合并回主分支。 - Sean Lynch
@SeanLynch 你加了 --force 开关吗?也许服务器不允许强制推送? - TimWolla
@TmWolla 是的,我添加了 --force 开关。我不确定为什么它不允许强制推送。 - Sean Lynch
1
@SeanLynch 那是服务器上的一个设置:https://dev59.com/rnI-5IYBdhLWcg3woJ9J#1754553。你应该在那里检查。 - TimWolla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接