如何用其他分支内容完全替换Git仓库master分支内容
问题原因
普通git merge操作默认会合并两个分支的差异,不会做全量覆盖:只要master分支存在updated分支没有的独有提交、独有文件,Git就会保留这部分内容,最终得到两个分支的混合结果,自然达不到完全替换的预期。
操作前建议先给当前master打备份分支,避免误操作丢失内容:git branch master-backup
操作方案
根据实际场景二选一即可:
方案1:全量对齐(推荐)
该方案会让master的内容、提交历史和updated分支完全一致,无任何原有内容残留:
- 切换到master分支
git checkout master - 将master分支指针硬重置到updated分支的最新提交,原有master上和updated不一致的内容、提交会被全部清空
git reset --hard updated - 如果需要同步到远程仓库,由于重置后本地与远程master历史不一致,需要执行强推(注意:强推会覆盖远程master的所有内容,操作前确认团队成员没有未同步到远程的重要master提交)
git push --force origin master
方案2:保留合并记录(适配禁止强推的团队场景)
如果团队规则不允许强推master、需要保留合并轨迹,可以通过生成合并提交的方式实现内容全量替换:
- 切换到master分支
git checkout master - 执行合并,指定策略直接采用updated分支的全部内容
git merge -s theirs updated
若当前Git版本不支持
-s theirs合并策略,依次执行以下命令可达到同等效果:git merge -s ours --no-commit updated git read-tree -u -m updated git commit -m "merge: fully replace master content with updated branch"
- 正常推送到远程即可
git push origin master
内容的提问来源于stack exchange,提问作者Loren
相关产品推荐
相关产品推荐

