沉梦手记 沉梦手记
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

    • idea相关

    • 玩转Git

      • 基础知识梳理
      • Git配置相关操作
      • git修改已提交的用户名和邮箱
      • git提交规范
      • git分支管理
      • git常用操作
      • git-submodule子模块管理
      • fork工作流与上游同步
        • 什么是 Fork?
        • 实战:基于 RuoYi-Vue-Plus 二开
          • 1. 在 Gitee 上 Fork
          • 2. 克隆你的 Fork 到本地
          • 3. 添加 upstream 远程
        • 分支策略
          • 创建开发分支
        • 同步上游更新
          • 步骤一:拉取上游最新代码
          • 步骤二:同步 master 分支
          • 步骤三:将上游更新合并到开发分支
        • 完整同步流程(速查)
        • 贡献代码回上游(提 PR)
        • 远程仓库管理命令速查
        • 常见问题
          • Q:Fork 之后,原仓库更新了,我的 Fork 会自动更新吗?
          • Q:我可以 push 到 upstream 吗?
          • Q:Fork 和 clone 有什么区别?
          • Q:同步上游时冲突太多怎么办?
        • 学习参考
      • gitignore最佳实践
      • 常见问题
    • Maven相关

    • 前端工具

    • 测试工具

    • AI工具

  • 工具库篇

  • 开发技巧篇

  • 工具类系列

  • 随笔

  • 开发日常
  • 开发工具篇
  • 玩转Git
沉梦听雨
2026-07-22
目录

fork工作流与上游同步

# Fork 工作流与上游同步

# 什么是 Fork?

Fork 是在远程平台上(如 GitHub、Gitee)创建一个属于你自己的仓库副本。与 git clone 不同,Fork 发生在远程平台层面,会在平台上创建一个新的远程仓库。

典型场景:

  • 你想基于某个开源项目做二次开发(二开),但不想直接修改原仓库
  • 你想给开源项目贡献代码,先 Fork 到自己账号下,修改后提 PR(Pull Request)回原仓库
  • 团队基于上游框架二开,需要定期同步上游的更新

关键概念:

术语 含义
upstream(上游) 原始仓库(被 fork 的仓库)
origin(源) 你 fork 出来的仓库(你自己的远程仓库)
local(本地) 你本地克隆的仓库
upstream(原仓库)  ←  fork  ←  origin(你的 fork)  ←  clone  ←  local(本地)
1

# 实战:基于 RuoYi-Vue-Plus 二开

以我的点餐项目为例,后端基于 dromara/RuoYi-Vue-Plus 二开:

# 1. 在 Gitee 上 Fork

在 Gitee 上打开 dromara/RuoYi-Vue-Plus 仓库页面,点击右上角 Fork 按钮,fork 到自己账号下。

Fork 完成后,你账号下会多一个仓库:dream-deeply-tyu/RuoYi-Vue-Plus。

# 2. 克隆你的 Fork 到本地

git clone https://gitee.com/dream-deeply-tyu/RuoYi-Vue-Plus.git backend
cd backend
1
2

此时 origin 自动指向你的 fork:

git remote -v
# origin  https://gitee.com/dream-deeply-tyu/RuoYi-Vue-Plus.git (fetch)
# origin  https://gitee.com/dream-deeply-tyu/RuoYi-Vue-Plus.git (push)
1
2
3

# 3. 添加 upstream 远程

git remote add upstream https://gitee.com/dromara/RuoYi-Vue-Plus.git
1

验证:

git remote -v
# origin    https://gitee.com/dream-deeply-tyu/RuoYi-Vue-Plus.git (fetch)   ← 你的 fork
# origin    https://gitee.com/dream-deeply-tyu/RuoYi-Vue-Plus.git (push)
# upstream  https://gitee.com/dromara/RuoYi-Vue-Plus.git (fetch)            ← 原仓库
# upstream  https://gitee.com/dromara/RuoYi-Vue-Plus.git (push)
1
2
3
4
5

origin 和 upstream 的区别:

  • origin:你有推送权限,日常开发推送到这里
  • upstream:你通常只有拉取权限,用于同步原仓库的更新

# 分支策略

基于 fork 二开时,推荐以下分支策略:

分支 用途 操作
master 只用于同步上游,不做任何业务改动 定期 git merge upstream/master
cm-dev(开发分支) 所有二开业务代码 日常开发提交

为什么不在 master 上做业务改动?

如果 master 上有你的业务代码,每次同步上游时会产生大量冲突。保持 master 干净(与上游一致),二开代码全在开发分支上,同步上游时只需处理开发分支的冲突。

# 创建开发分支

git checkout -b cm-dev
git push -u origin cm-dev
1
2

# 同步上游更新

当原仓库(upstream)有新版本发布时,你需要把更新同步到你的 fork:

# 步骤一:拉取上游最新代码

# 拉取 upstream 的所有分支信息(不合并,只更新本地引用)
git fetch upstream
1
2

# 步骤二:同步 master 分支

# 切到 master 分支
git checkout master

# 合并上游 master 的更新
git merge upstream/master

# 推送到你的 fork(保持 origin/master 与 upstream/master 一致)
git push origin master
1
2
3
4
5
6
7
8

因为 master 不做业务改动,这里通常是 fast-forward 合并,不会有冲突。

# 步骤三:将上游更新合并到开发分支

# 切到开发分支
git checkout cm-dev

# 合并 master 的更新(此时 master 已包含上游最新代码)
git merge master

# 如果有冲突,手动解决后:
git add .
git commit

# 推送到你的 fork
git push origin cm-dev
1
2
3
4
5
6
7
8
9
10
11
12

这一步可能会有冲突(你的二开代码与上游更新重叠的地方),需要手动解决。

# 完整同步流程(速查)

# 1. 拉取上游更新
git fetch upstream

# 2. 同步 master
git checkout master
git merge upstream/master
git push origin master

# 3. 合并到开发分支
git checkout cm-dev
git merge master
# 解决冲突(如果有)
git push origin cm-dev
1
2
3
4
5
6
7
8
9
10
11
12
13

# 贡献代码回上游(提 PR)

如果你想给原仓库贡献代码:

# 1. 在开发分支上完成修改并推送到你的 fork
git push origin cm-dev

# 2. 在 Gitee/GitHub 上发起 Pull Request
#    源分支:你的 fork 的 cm-dev
#    目标分支:upstream 的 master(或 dev)
1
2
3
4
5
6

提 PR 前,建议先同步上游最新代码,确保你的代码基于最新版本,减少冲突。

# 远程仓库管理命令速查

# 查看所有远程仓库
git remote -v

# 添加远程仓库
git remote add <名称> <url>
# 示例:git remote add upstream https://gitee.com/dromara/RuoYi-Vue-Plus.git

# 删除远程仓库
git remote remove <名称>
# 示例:git remote remove upstream

# 修改远程仓库地址
git remote set-url <名称> <新url>
# 示例:git remote set-url origin https://gitee.com/new-user/RuoYi-Vue-Plus.git

# 重命名远程仓库
git remote rename <旧名称> <新名称>
# 示例:git remote rename upstream origin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 常见问题

# Q:Fork 之后,原仓库更新了,我的 Fork 会自动更新吗?

不会。Fork 是一次性复制,之后两者完全独立。需要手动 git fetch upstream + git merge 来同步。

# Q:我可以 push 到 upstream 吗?

通常不行。除非原仓库给你分配了写权限。所以日常开发推送到 origin(你的 fork),同步更新从 upstream 拉取。

# Q:Fork 和 clone 有什么区别?

Fork clone
操作位置 远程平台(Gitee/GitHub) 本地
是否创建新远程仓库 是,创建一个属于你的远程副本 否,只克隆到本地
与原仓库关系 远程层面有关联(平台记录了 fork 关系) 无关联,只是本地副本

# Q:同步上游时冲突太多怎么办?

如果二开改动较大,同步上游时冲突可能很多。建议:

  1. 小步同步:不要攒了几个月再同步,定期(如每周)同步一次,冲突更小
  2. 保持 master 干净:master 只同步上游,业务代码全在开发分支
  3. 按模块隔离改动:二开代码放在独立模块/目录中,减少与上游代码的交叉

# 学习参考

  • Fork a repo - GitHub Docs (opens new window)
  • Configuring a remote for a fork - GitHub Docs (opens new window)
  • Syncing a fork - GitHub Docs (opens new window)
上次更新: 2026/7/24 16:59:26
git-submodule子模块管理
gitignore最佳实践

← git-submodule子模块管理 gitignore最佳实践→

Theme by Vdoing | Copyright © 2023-2026 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式