协慌网

登录 贡献 社区

使当前的 Git 分支成为主分支

我在 Git 中有一个存储库。我做了一个分支,然后对主人和分支做了一些改变。

然后,几十次提交之后,我意识到分支处于比主设备好得多的状态,所以我希望分支 “成为” 主设备并忽略主设备上的更改。

我无法合并它,因为我不想在 master 上保留更改。我该怎么办?

额外 :在这种情况下,'old' 主服务器已经push送到另一个存储库,例如 GitHub。这怎么改变了?

答案

另外两个答案的问题是新主人没有旧主人作为祖先,所以当你推动它时,其他人都会搞砸了。这是你想要做的:

git checkout better_branch
git merge --strategy=ours master    # keep the content of this branch, but record a merge
git checkout master
git merge better_branch             # fast-forward master up to the merge

如果您希望您的历史记录更清晰一点,我建议您在合并提交消息中添加一些信息,以明确您已完成的工作。将第二行更改为:

git merge --strategy=ours --no-commit master
git commit          # add information to the template merge message

确保所有内容都被推送到远程存储库(GitHub):

git checkout master

用 “better_branch” 覆盖 “master”:

git reset --hard better_branch

强制推送到远程存储库:

git push -f origin master

编辑:你没有说你已经推到公共回购!这让世界变得与众不同。

有两种方式,“脏” 方式和 “干净” 方式。假设您的分支名为new-master 。这是干净的方式:

git checkout new-master
git branch -m master old-master
git branch -m new-master master
# And don't do this part.  Just don't.  But if you want to...
# git branch -d --force old-master

这将使配置文件更改为与重命名的分支匹配。

你也可以用脏方式来做,这不会更新配置文件。这就是上面介绍的内容......

mv -i .git/refs/new-master .git/refs/master
git checkout master