Git操作:将redesign分支合并更新到dev、master并保留提交历史
分支调整操作方案(适配现有团队工作流,全量保留提交历史)
不需要改动你现有团队沿用的工作流规则,按下面步骤操作即可,全程不会丢失提交历史,也不会影响现有Web服务器的部署逻辑。
前置准备(必做,避免操作失误丢代码)
- 操作前先把本地所有仓库的未提交改动处理完:要么临时commit,要么用stash暂存,保证三个分支(master、dev、redesign)的工作区是干净的
- 分别给本地三个分支拉取最新同步,和局域网Git服务器的远端状态保持一致
- 给三个分支各打一个备份标签,万一操作出错可以一键回滚,几乎零成本:命令行切到对应分支执行
git tag backup_<分支名>_<操作日期>即可,Sourcetree里右键对应分支选「创建标签」就能操作。
具体操作步骤
第一步:将redesign全量覆盖到dev分支,保留全量历史
这一步的目标是让dev分支的文件内容和redesign完全一致,同时保留dev、redesign两个分支的所有历史提交,不会出现历史断档。
- 命令行操作(在你存dev/redesign的本地仓库文件夹下执行):
- 切到dev分支:
git checkout dev - 同步远端dev最新状态:
git pull origin dev - 执行合并,所有冲突默认采用redesign的版本,合完dev内容和redesign完全一致:
git merge -s recursive -X theirs redesign
- 切到dev分支:
- Sourcetree操作:
- 打开对应本地仓库,双击左侧分支列表的dev,切换到dev分支
- 点击顶部「拉取」按钮,同步远端dev的最新内容
- 右键左侧分支列表的redesign,选择「合并redesign至当前分支」
- 弹出的合并设置窗口中,找到合并选项,勾选「冲突时优先使用传入版本(theirs)」,点击确认完成合并。
第二步:按原有日常流程把dev合并到master分支
这一步和你平时开发完合代码上线的流程完全一致,不需要额外调整习惯,目标是让master分支的内容和当前dev(即redesign)完全一致。
- 命令行操作(在你单独存master分支的本地仓库文件夹下执行):
- 切到master分支:
git checkout master - 同步远端master最新状态:
git pull origin master - 执行合并,所有冲突默认采用dev(即redesign)的版本:
git merge -s recursive -X theirs dev - 确认本地master文件内容和redesign完全一致后,推送到局域网Git服务器:
git push origin master - 最后登录Web服务器,进入项目目录执行
git pull origin master,就完成了新版本上线,和你之前的部署流程完全一样。
- 切到master分支:
- Sourcetree操作:
- 打开你本地存master的仓库对应的Sourcetree窗口,双击master分支切换过去
- 点击顶部「拉取」按钮,同步远端master最新内容
- 右键左侧分支列表的dev,选择「合并dev至当前分支」,同样勾选「冲突时优先使用传入版本」,确认完成合并
- 点击顶部「推送」按钮,把合并后的master推送到局域网Git服务器
- 到Web服务器拉取最新master代码,完成部署。
操作后校验
- 随机抽查几个redesign分支改过的核心文件,对比dev、master本地的文件内容,确认和redesign完全一致,没有旧版本残留
- 查看提交日志,确认redesign从创建到现在的所有提交、之前dev和master的历史提交都完整存在,没有断档
- 如果操作过程中出现问题,直接回滚到之前打的备份标签即可,不会影响远端仓库的现有内容。
注意:不要直接用硬重置加强推的方式把master直接指向redesign的提交,这种方式会抹掉master上redesign创建之后的提交历史,强推后Web服务器拉取时还可能出现分支不匹配的报错,后续追溯线上历史版本也会断档。上面的合并方案完全适配你现有工作流,不需要改任何现有部署、拉取的配置,也能100%保留全量提交历史。
内容的提问来源于stack exchange,提问作者b4tch
相关产品推荐
相关产品推荐

