Git将主分支替换为另一个分支
我对Git相当陌生,自从接受一个新客户(在我开始为他们工作之前,他们一直用它来管理其软件的版本控制)以来,Git在过去几个月中一直使用它。
我最近将一个development
分支与我的本地master
分支合并,并将master
服务器推送到服务器。 在将它推送到服务器之前,我已经在本地开发机器上测试了该网站(用Django / Python编写的网站),并且它似乎都正常工作(包括已在development
分支上实施的错误修复)。
但是,在测试推送到服务器之后所做的更改之后,我发现某些内容已损坏网站的一部分。 所以我在服务器上签出了一个旧的commit
,现场版本现在正在使用那个旧commit
,这意味着它处于“Detached HEAD”状态,但功能正常。
所以,我的本地master
分支是目前我推送到服务器(本地工作,但没有在服务器上)的错误修复的版本,但由于我需要在网站的另一个方面工作,所以我希望恢复到我在将development
分支与错误修复合并到master
之前完成的master
的备份,以便从代码的“最近工作”状态开发。
我在我机器上的分支是:
master
(与development
融合在一起,这已经打破了别的东西)
masterBackup
(即在将development
合并到它之前的master
分支)
development
(这是原来的bug已被修复的分支,但其他的东西现在被破坏了)
实际上, masterBackup
实际上是我目前正在工作的“主”分支,因为将development
合并master
破产master
。 我想再次将masterBackup
我的'master'分支,并且可以放弃/移除当前状态下的master
。 我仍然有development
分支,所以可以研究为什么/如何打破网站并在将它合并到master
之前修复它。
我发现在如何从另一个分支完全替换git中的master分支的问题? 接受的答案表明我应该执行以下步骤:
git checkout masterBackup
git merge -s ours master
git checkout master
git merge masterBackup
但是我找不到任何明确的解释命令git merge -s ours
东西 - git merge -s ours
做...这绝对是如何使我的masterBackup
分支再次成为master
分支?
该帖子中的命令不适合你。 这些命令的结果是使masterBackup分支包含master分支中的所有更改。 因为这不是你想要的。
如果你只是想masterBackup分支作为主分支,你可以通过重命名它
git branch -m master master1
git branch -m masterBackup master
现在masterBackup被替换为master分支。 但是,如果你想推送本地主分支到远程主,你应该使用git push -f origin master
。
最安全的选择是恢复在分离的提交之后发生的对master
分支的提交,其中一切正常工作:
git revert <SHA-1>^..HEAD # SHA-1 is the earliest commit you want gone
这个选项会在master
顶部提交一个提交,解除范围中的每个提交。 在此之后,你的分支应该在功能上与你想要的地方相同。 您可以像平常一样继续工作,照常进行。
但是如果你愿意,你也可以重写master
的历史。
警告:此选项将重写发布的master
分支的历史记录,因此只有在您可以处理随附的警告时才会考虑。
如果您想要将master
分支永久恢复到较早的提交,您可以执行以下步骤:
git checkout master
git reset --hard <SHA-1 of earlier commit you want to keep>
这将覆盖您的本地master
分支,以使其HEAD现在是较早运行的提交。
请注意,这将更改远程发布的master
分支的历史记录,因此为了更新远程,您必须通过以下方式进行强制推送:
git push --force origin master
链接地址: http://www.djcxy.com/p/94815.html