当前位置: 首页 > news >正文

git upstream

你的场景

  • 本地仓库最初是从“别人的仓库 A”拉下来的(clone)。
  • 之后你把默认远程改成了“你自己的仓库 B”(例如改了 origin 到你的 repo)。
  • 现在“别人的仓库 A”有了新提交,你想先把这些更新合并到本地,再推到你自己的仓库 B。

这就是典型的“上游同步”流程:为上游仓库添加一个额外远程 upstream,然后定期合并/变基,再推送到自己的仓库。


一次配置,长期使用的标准做法

假设:

  • 你自己的仓库(你有推送权限)作为 origin
  • 别人的原始仓库作为 upstream
  • 主分支为 main(如果是 master 或其他,请相应替换)
  1. 添加上游远程
  • git remote add upstream <别人的仓库A的URL>
  • 验证:git remote -v 应该看到 origin 和 upstream 两个远程
  1. 获取上游更新
  • git fetch upstream
  1. 在你的目标分支上同步上游
  • 切到你的本地主分支:
    • git switch main
  • 同步方式二选一:
    • 合并(保留合并节点)
      • git merge upstream/main
    • 变基(历史线性,常用于保持整洁)
      • git rebase upstream/main
  1. 解决冲突(若有)
  • 按文件解决冲突后:
    • 变基流程:git add <file>git rebase --continue
    • 合并流程:git add <file>git commit 完成合并提交
  1. 推送到你的仓库(origin)
  • 若是合并:git push origin main
  • 若是变基(改写了历史):
    • 首次需要安全强推:git push --force-with-lease origin main

你的功能/改动分支也要跟上游?

如果你的改动在其他分支上,比如 feat/x

  • 先让 main 跟上游对齐(见上面步骤)。
  • 再把 feat/x 基于更新后的 main 同步:
    • 合并方式:
      • git switch feat/x
      • git merge main
    • 变基方式(线性):
      • git switch feat/x
      • git rebase main
  • 解决冲突后推送到你的仓库:
    • 合并:git push origin feat/x
    • 变基:git push --force-with-lease origin feat/x

常见问题与建议

  • 避免“unrelated histories”
    • 确保 upstream 指向的就是当初克隆的那个源仓库;不要把完全无关的仓库当作 upstream。
  • 避免覆盖他人更新
    • 强推请使用 --force-with-lease,避免误覆盖远端新提交。
  • 拉取策略一致
    • 喜欢线性历史:设置 git config --global pull.rebase true
    • 需要自动暂存未提交改动再变基:git config --global rebase.autoStash true

一键回顾(常用命令串)

  • 首次配置上游
    • git remote add upstream <上游URL>
  • 每次同步更新
    • git fetch upstream
    • git switch main
    • 变基版:git rebase upstream/main ;或 合并版:git merge upstream/main
    • 推送到自己的仓库:变基用 git push --force-with-lease, 合并用 git push

如果你把 git remote -v 和分支名发我(main/master),我可以给你可直接粘贴的具体命令。

http://www.xdnf.cn/news/1296073.html

相关文章:

  • 流式数据服务端怎么传给前端,前端怎么接收?
  • 入门概述(面试常问)
  • vercel部署上线
  • 【数据分享】351个地级市农业相关数据(2013-2022)-有缺失值
  • 数智先锋 | 告别运维黑盒!豪鹏科技×Bonree ONE构建全栈智能可观测体系
  • 带环链表详解:环形链表检测与入环节点查找
  • 从 Notion 的水土不服到 Codes 的本土突围:研发管理工具的适性之道​
  • Linux下的软件编程——framebuffer(文件操作的应用)
  • 表达式树实战:Unity动态逻辑编程
  • tp5集成elasticsearch笔记
  • Unity中的神经网络遗传算法实战
  • 一篇文章读懂.Net的依赖注入
  • .NET 的 WebApi 项目必要可配置项都有哪些?
  • .Net4.0 WPF中实现下拉框搜索效果
  • 面试题之项目中git如何进行管理
  • 如何启动本机mysql数据库
  • 在mysql> 下怎么运行 .sql脚本
  • XCTF-warmup详细题解(含思考过程)
  • Morph Studio-一站式AI视频创作平台
  • Vue浅学
  • Elasticsearch 中如何配置 RBAC 权限-实现安全的访问控制
  • QT6(创建第一个QT项目)
  • Win10上Qt使用Libcurl库
  • Qt 实现Ymodem协议源码分享
  • MySQL工具包中的其他程序
  • 从概率填充到置信度校准:GPT-5如何从底层重构AI的“诚实”机制
  • 树莓派 4B 上部署 Minecraft PaperMC 1.20.x 的一键部署脚本
  • ASQA: 面向模糊性事实问题的长格式问答数据集与评估框架
  • C#WPF实战出真汁02--登录界面设计
  • 利用 Python 爬虫按图搜索 1688 商品(拍立淘)实战指南