协慌网

登录 贡献 社区

如何在 Git 中完全替换另一个分支中的 master 分支?

可能重复:
使当前的 Git 分支成为主分支

我的 Git 存储库中有两个分支:

  1. master
  2. seotweaks (最初由master创建)

我创造了seotweaks ,目的是迅速将它合并回master 。然而,那是三个月前,这个分支中的代码比master高出 13 个版本。

这实际上已经成了我们的工作主分支中的所有代码master或多或少过时了。

我知道非常糟糕的做法,经验教训。

你知道如何用seotweaks那些替换master分支的所有内容吗?

我可以删除master所有内容并合并,但这不是最佳实践。

答案

你应该能够使用 “我们的” 合并策略用 seotweaks 覆盖 master 如下:

git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

结果应该是你的主人现在基本上是 seotweaks。

-s ours--strategy=ours简称)

从关于 “我们的” 战略的文档

这会解析任意数量的头,但合并的结果树始终是当前分支头的树,实际上忽略了所有其他分支的所有更改。它旨在用于取代侧枝的旧发展历史。请注意,这与递归合并策略的 - Xours 选项不同。

那么使用 git branch -m 将 master 分支重命名为另一个分支,然后将 seotweaks 分支重命名为 master?像这样的东西:

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

这可能会删除 origin master 中的提交 ,请在运行git push -f origin master之前检查你的git push -f origin master

您可以在远程重命名 / 删除 master,但如果很多人将他们的工作建立在远程主分支上并在本地仓库中拉出该分支,这将是一个问题。
这可能不是这里的情况,因为每个人似乎都在分支 ' seotweaks '。

在这种情况下,你可以:
git remote - 显示可能无法正常工作。 (制作一个git remote show来检查你的本地仓库中你的遥控器的声明方式。我会假设 ' origin ')
(关于 GitHub, house9评论:“我必须再做一个步骤,点击 GitHub 上的' Admin '按钮并将' Default Branch '设置为' master '之外的其他内容,然后将其放回去”)

git branch -m master master-old  # rename master on local
git push origin :master          # delete master on remote
git push origin master-old       # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master           # create master on remote

但是又一次:

  • 如果其他用户试图在遥控器上删除主设备时拉动,他们的拉动将失败(“遥控器上没有这样的参考”)
  • 当在远程上重新创建 master 时,pull 将尝试在其本地(现在是旧的)master 上合并该新 master:许多冲突。他们实际上需要reset --hard他们的本地主人员reset --hard到他们将要获取的远程 / 主分支,并忘记他们当前的主人。