单独将某个文件置为某个分支的版本:
# 将aaa.go文件变成master分支的版本
git checkout master -- aaa.go
假设场景
有一个公共分支,pre-release,版本比master大很多,是很多人的提交,它的内容不仅仅有修改,还有新增文件,或者删除文件(对比master分支),现在想把master的内容覆盖pre-release的内容,有什么方便的做法?
前提
pre-release
分支目前有大量独立提交(改动、增删文件)master
分支内容为你需要覆盖的内容- 希望方便操作,覆盖方式根据是否保留历史分为不同方案
方案一:用 git reset --hard master
操作流程:
git checkout pre-release
git reset --hard master
git push origin pre-release --force
效果:
pre-release
分支的指针和内容直接指向master
最新提交pre-release
原来的提交历史完全被覆盖,变成和master
一样- 远程分支用
--force
推送后也被覆盖
适用场景:
- 你不介意丢失
pre-release
的提交历史(git commit记录全部没了) - 希望两个分支完全一致(内容+提交历史)
风险提示:
- 可能会影响其他协作者,历史丢失,操作前请确认或备份
方案二:用 git checkout master -- .
只覆盖内容,保留历史
操作流程:
git checkout pre-release
git checkout master -- .
git commit -m "Reset pre-release content to master"
git push origin pre-release
效果:
pre-release
历史提交保留- 新增一个提交,文件内容变成和
master
一致(包括新增、删除的文件) - 远程分支正常推送即可
适用场景:
- 需要保留
pre-release
历史记录 - 只想让分支内容同步到
master
方案三:删除并重建 pre-release
操作流程:
git branch -D pre-release
git push origin --delete pre-release
git checkout -b pre-release master
git push -u origin pre-release
效果:
- 本地和远程都删除了
pre-release
历史 - 重新创建的
pre-release
分支内容和历史完全和master
一致
适用场景:
- 不介意删除
pre-release
历史,想干净重新开始
总结建议
情况 | 推荐方案 |
---|---|
需要保留 pre-release 历史,只覆盖内容 | 方案二 |
不介意历史,想让两个分支完全等同 | 方案一 或 方案三 |
想清理旧分支,重建分支 | 方案三 |
如果你需要,我可以帮你写具体的命令脚本或详细操作说明。