我在 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