撤销后无法推送到主分支(master)

7
我不小心将更改推送到了远程主分支。为了保险起见,我创建了一个名为backup的分支,以将更改保存在其中。然后我撤销了我对远程主分支的更改。
在我的本地主分支上,我运行了以下命令:
git revert <commit_sha>

然后

git push

我已经完成了新分支(备份)的工作,一切看起来都很好。但是我无法将本地backup分支的更改推送到远程master分支。当我在backup分支上运行git pull时,我所做的更改会丢失。代码被远程master的内容替换。

有没有办法让我推送我的更改到远程master分支而不会丢失我的工作?


我检出了一个新的分支并将它们推送到那里。这没有意义:你可以检出本地分支,但不能推送到其中一个。你需要澄清你的问题。 - jub0bs
@Jubobs 我认为 OP 的意思是他创建了一个“备份”分支并将其推送到了他的远程仓库。 - ivan.sim
I then reverted the push I did to master” 也毫无意义。您的意思是您撤消了本地 master 分支中的最后一次提交,还是您强制推送到远程 master 分支? - jub0bs
抱歉 @Jubobs,我的意思是我创建了一个备份分支,并在那里继续工作,就像isim所说的那样。 - Whiskey
此外,请澄清“所有我的更改都将被主分支覆盖”。 - jub0bs
1个回答

7

更新

由于您已经在本地的master分支上执行了revert操作并将其推送到了远程,因此您应该只需在本地的master分支上进行所有新更改,并忘记backup分支。请注意,您的backup分支仍然包含之前的错误代码。如果您将其推送到远程,则会重新引入那些已被还原的代码。

原始答案

如果您是远程存储库唯一的工作人员,那么您应该能够使用

git push -f <remote> <branch>

将你的新分支强制推送到远程主分支。

为了帮助理解术语,每个git仓库都有一个本地的master分支。因此,说“我把我的更改推送到了master”是没有意义的。我们要么“推送到远程(默认标记为origin)”,要么“与(本地)master合并”。


我不是唯一在远程主分支上工作的人,有没有安全的方法来做这件事? - Whiskey
如果你不是唯一在远程分支上工作的人,你就不应该重写历史(使用git revert),除非你绝对200%确定自己的意外更改没有被其他人通过git pull拉取。 - ivan.sim
自从我推送了不必要的更改以来,没有人进行git pull。 - Whiskey
@user3393708 其实,我混淆了“reset”和“revert”。如果你使用“revert”,那么你就不必担心有人已经进行了pull。 - ivan.sim
既然你已经在本地主分支上撤销了错误,为什么不能在那里进行新更改并忘记备份分支呢? - ivan.sim

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