Skip to content

git同步上游仓merge版

更新: 2/28/2026 字数: 0 字 时长: 0 分钟

前置条件

确认已配置 upstream remote(只需做一次):

bash
# 查看当前 remote
git remote -v

# 如果没有 upstream,添加它
git remote add upstream https://github.com/原作者/上游仓库.git

标准同步流程

bash
# 1. 拉取上游最新代码(不会修改本地文件)
git fetch upstream

# 2. 查看上游有哪些新提交(可选,了解更新内容)
git log HEAD..upstream/master --oneline

# 3. 合并上游更新到本地
git merge upstream/master --no-edit

# 4. 推送到你的 fork
git push origin master

遇到冲突怎么办?

建议

冲突 = 你和上游同时修改了同一段代码。Git 不知道该保留谁的,需要你手动决定。

判断原则

场景策略命令
这段代码你有自定义逻辑保留你的(ours)git checkout --ours <文件>
你没改过,只是上游重构了接受上游(theirs)git checkout --theirs <文件>
两边都有价值手动编辑合并编辑器里删除冲突标记

冲突标记说明

diff
<<<<<<< HEAD
你的本地代码(current)
=======
上游的代码(incoming)
>>>>>>> upstream/master

解决后提交

bash
# 标记冲突已解决
git add <冲突文件1> <冲突文件2>

# 完成合并提交
git commit --no-edit

# 推送
git push origin master

⚠️ 常见坑点

1. 上游重命名了文件

本次实际遇到:mltb_client.pytelegram_manager.py

症状:合并后运行报 ModuleNotFoundError原因:你本地修改过的文件仍然 import 旧模块名 修复:全局搜索旧名称,替换为新名称

bash
grep -r "mltb_client" bot/  # 找到残留引用
# 手动修改 import 路径

2. Docker 部署项目记得重新构建

bash
docker compose down
docker compose up -d --build
docker compose logs --tail=30   # 检查启动日志

一键脚本(进阶)

如果你经常同步,可以用这个一把梭:

bash
#!/bin/bash
set -e
echo "📡 Fetching upstream..."
git fetch upstream
echo "🔀 Merging..."
if git merge upstream/master --no-edit; then
    echo "✅ Merge successful, pushing..."
    git push origin master
    echo "🎉 Done!"
else
    echo "⚠️ Conflicts detected! Resolve manually."
    git diff --name-only --diff-filter=U
fi

浪漫宇宙旗下知识库分享站