如何用另一分支的完整内容更新分支且保留提交历史?
用Git规范方式同步分支内容并保留历史
我懂你的需求——要保住部署分支的所有过往部署记录,同时用另一个分支的完整文件内容更新它,还不想用暴力的push --force或者手动复制粘贴这种不规范的操作。其实Git有很直接的原生方法能实现这个,完全符合工作流规范:
具体操作步骤
假设你的部署分支叫deploy,源分支叫source,按下面的步骤来就行:
切换到部署分支,先确保工作区干净(如果有未提交的修改,先
git stash暂存或者提交掉):git checkout deploy同步源分支的所有文件内容到当前分支:
这里有两个等价的命令,选你顺手的用:- 用经典的
git checkout:git checkout source -- . - 用更现代的
git restore(Git 2.23及以上版本支持):git restore --source=source .
这两个命令的作用是:把
source分支的**所有文件(包括隐藏配置文件、.gitignore未排除的文件等)**直接覆盖到当前deploy分支的工作区和暂存区,相当于完整复制source的当前状态,但不会改动deploy的历史记录。- 用经典的
提交同步操作:
先查看状态确认所有文件都更新到位:git status然后提交,写清楚提交信息方便后续追溯:
git commit -m "Deploy: Full content sync from source branch"推送到远程仓库(如果需要的话):
git push origin deploy
为什么这个方法更靠谱?
- 完整保留历史:这个操作会在
deploy分支的现有历史后面新增一个提交,所有过往的部署记录都完好保留,随时能用git log查看或者回滚到之前的版本。 - 精准无遗漏:Git命令会同步所有符合规则的文件,不会像手动复制那样漏掉隐藏文件或者误删内容。
- 符合Git规范:整个流程是Git原生支持的工作流,没有任何“野路子”,团队里其他成员也能轻松理解这个提交的意义。
注意事项
- 执行前一定要确保
deploy分支的工作区是干净的,否则Git会提示你先处理未提交的修改,避免内容丢失。 - 如果
source和deploy分支有同名文件内容不同,这个操作会直接用source的内容覆盖deploy的——这正是你要的完全替换效果,所以不用担心冲突问题。
内容的提问来源于stack exchange,提问作者undefined
相关产品推荐
相关产品推荐

