如何无需解决冲突将dev分支完全替换为master分支?
无需解决冲突将dev分支设为新master分支的方法
本地操作步骤
- 先把本地dev分支同步到最新:
git checkout dev git pull origin dev - 把本地master分支直接硬重置成dev的当前状态——这一步会彻底覆盖master的所有历史,完全和dev对齐,不会产生任何冲突:
git checkout master git reset --hard dev
远程仓库推送步骤
GitHub默认给master开了分支保护(不让强制推送),所以得先改下仓库设置:
- 登录GitHub你的仓库页面,点「Settings」→「Branches」→「Branch protection rules」,找到master的保护规则,暂时关掉「Require a pull request before merging」和「Do not allow bypassing the above settings」这类限制强制推送的选项(之后可以再开回来)。
- 执行强制推送,把本地重置后的master推到远程:
用git push origin master --force-with-lease--force-with-lease比直接--force更稳妥,它会检查远程master有没有你本地没拿到的新提交(虽然你说master已经过时,但这个参数能避免误操作)。
关于你试过的方法补充
- 删除master再重建:GitHub不让删是因为默认保护了master,取消保护后可以删,但重置的方法比删了重建更省事。
- 变基操作:变基要逐个提交处理冲突,完全不适合这种直接替换分支的场景。
--theirs参数:这个参数一般是合并冲突时直接用对方分支的内容,比如git merge -X theirs dev,但这么做会生成合并提交,历史还保留着,不如重置彻底,适合需要留合并记录但直接用对方内容的情况,而你要的是完全替换master,所以重置才是最优解。
内容的提问来源于stack exchange,提问作者Enzo
相关产品推荐
相关产品推荐

