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

上一篇: Git replace master branch with another branch

下一篇: pick to a commit beyond a merge