如何提交PR

如何提交PR

首先,你需要明白两种情况:

  1. 你fork的上游仓库并没有对PR进行合并,导致代码和数据还是旧的
  2. 你fork的上游仓库一直再更新,不断的有新的代码和数据进来。

记得先创建upstream

shell 复制代码
git remote add upstream https://github.com/原项目/项目名.git

所以:

对于你fork下来的项目,你需要再创建一个新的分支,比如你主分支是main,那么这个时候你就需要再创建一个dev分支:

  1. main分支是为了合并上游仓库的修改(情况2)
  2. dev分支是为了方便你开发

现在首先切换到dev分支,进行开发:

shell 复制代码
git checkout dev

现在假如你已经开发好了:

shell 复制代码
git add .
git commit -am "add:new project data"

然后,你需要确定你是否存在未提交的修改

shell 复制代码
git status

有的话处理一下,没有的就忽略。

然后,切换到main分支(你的主分支)上:

shell 复制代码
git checkout main

获取上游仓库的最新代码(情况2)

shell 复制代码
# 获取上游最新代码(不自动合并)
git fetch upstream

# 将上游更新合并到你的 main 分支
git merge upstream/main
# 如果有冲突,解决后提交:
#   git add .
#   git commit -m "合并上游更新"

# 更新你的远程仓库
git push origin main
shell 复制代码
# 切换回 dev 分支
git checkout dev

# 将 main 分支的更新合并到 dev(包含上游更新)
git merge main

# 如果有冲突,解决后提交
# 推送到远程
git push origin dev

下面将演示一次完整的提交pr的流程:

shell 复制代码
# 1. 确保在 dev 分支开发
git checkout dev

# 2. 进行开发工作
# ...修改代码...
git add .
git commit -m "添加新功能X"

# 3. 获取上游更新(安全操作)
git fetch upstream

# 4. 将上游更新合并到你的 dev 分支
git merge upstream/main

# 5. 处理可能出现的冲突
# 如果有冲突,Git 会提示你:
#   手动解决冲突文件
#   git add 解决后的文件
#   git commit -m "解决与上游的冲突"

# 6. 推送到你的远程仓库
git push origin dev

# 7. 创建或更新 PR
# 现在去 GitHub/GitLab 提交或更新你的 PR
  1. git fetch upstream 只下载不修改
    • 这个命令只获取上游的最新代码信息
    • 不会修改你的任何本地文件
    • 相当于"查看"上游的变化,但不应用
  2. git merge upstream/main 是安全的合并
    • Git 不会删除你的代码,而是尝试合并
    • 可能出现三种情况:
      • 没有冲突:你的修改和上游修改兼容,自动合并
      • 有冲突但可自动解决:Git 会智能合并
      • 需要手动解决的冲突:Git 会提示你,给你机会决定保留哪些修改
  3. 你的代码不会消失的原因
    • 合并操作是"加法"不是"替换"
    • 你的 commit 历史仍然保留
    • Git 会创建一个新的"合并提交"包含双方修改

场景:上游还没合并你的 PR,但你有了新修改

  1. 当你执行 git merge upstream/main
    • Git 会检测到上游的新代码
    • Git 会检测到你本地的修改(包括上次 PR 的修改)
    • Git 会尝试将两者合并
  2. 结果:
    • 如果无冲突:你的修改和上游修改共存
    • 如果有冲突:Git 会暂停合并,让你手动解决
      • 冲突文件会有特殊标记:<<<<<<< (你的代码) 和 >>>>>>> (上游代码)
      • 你手动编辑文件,决定保留哪些部分
      • 完成后继续合并
  3. 最终效果:
    • 你的本地代码既包含你的新修改
    • 也包含上游的最新更新
    • 上次PR的修改仍然存在(因为还没被上游合并)
相关推荐
Rabbit_QL12 小时前
【Git 报错处理】`remote origin already exists` 是什么意思?
git
qq_3810137413 小时前
IntelliJ IDEA中GitHub Copilot完整使用教程:从安装到实战技巧
其他·github·intellij-idea·copilot
陈佬昔没带相机15 小时前
GitHub clone 不动、pip 卡住、brew 转圈?一份指南搞定
git·npm
happyprince18 小时前
2026年04月07日热门github项目
github
奔跑草-18 小时前
【AI日报】每日AI最新消息2026-04-07
人工智能·大模型·github·开源软件
CoovallyAIHub18 小时前
Sensors 2026 | 从无人机拍摄到跑道缺陷地图,机场巡检全流程自动化——Zadar机场全跑道验证
数据库·架构·github
CoovallyAIHub18 小时前
15K Star中文首发!$5部署一个会自我进化的私人Agent——NousResearch开源Hermes Agent
git·架构·github
无限进步_19 小时前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
降临-max19 小时前
Git 协同开发与冲突解决
笔记·git
淼淼爱喝水19 小时前
Ansible 基础模块实战作业详细教程
chrome·github·ansible