Git:如何在远程origin上倒回Master分支

3
在私有项目上进行错误调试时,我向主分支提交了5个commit并将其推送到远程源(我的私人vps)。之后,我发现第4和第5个commit会在其他地方引起问题,因此我从commit 3检出,新建了一个名为“Dev”的分支,并进行了更正问题的几个commit。然后我在Master上执行了“git reset --hard HEAD~2”命令,将其拉回到我从那里创建Dev分支的位置。接着我执行了“git merge”命令,将Master快进到Dev分支的末尾。现在,我拥有一个本地存储库,其中Dev和Master都指向最新的版本,具有最新的错误修复。但是,当我尝试将项目推送到远程源时,它失败并给出以下错误消息:“![rejected] master -> master (non-fast forward) error: failed to push some refs to 'myserver...myproject.git'”。我做错了什么,该如何解决?谢谢。

实际上,您正在询问如何推送不是远程分支的直接后代的内容。因此,这是可能的重复:https://dev59.com/gXVC5IYBdhLWcg3wjx_u - CB Bailey
1个回答

5

它只是不喜欢你将推送分支作为它的祖先。

如果你确定要这么做,只需在推送时添加-f标志(强制)。


2
“如果你确定”是指:如果这是一个私人项目,或者是一个公共项目但你知道没有人从这个分支拉取过代码,或者错误非常严重,值得让其他人为了修复它而遇到麻烦,而不是添加修正提交。 - Cascabel
3
这值得重申:你所做的是改写历史。就像在现实生活中一样,你可以改写历史,但你需要有一个共谋才能做到。换句话说:每个人都必须“参与其中”,即每个人都必须同意改写历史。(其中“每个人”指的是“曾经从存储库中提取过的所有人,即使是间接的”。) - Jörg W Mittag
谢谢大家。我想我理解了其中的含义。这只是一个私人项目,所以在这种情况下不会有其他人受到影响。但将来它不会回来困扰我,对吧……?目前它只是主分支上的一系列提交,因此新的贡献者将来不会受到麻烦? - petesiss

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