Git多仓库协作中和并冲突问题:“不相关历史合并”+“问跟踪文件冲突”

一、问题描述

1.1 背景

本地仓库:yolov8_test

远程仓库:github.com:user_name/yolo-project.git

目标:将本地仓库的main.py文件推送到远程仓库

1.2 执行流程

先是使用SSH连接远程仓库

复制代码
git remote add origin SSH路径(从远程仓库复制)

查看是否连接远程仓库

复制代码
git remote -v

查看远程仓库的更新(看有哪些更新)

复制代码
git fetch origin

拉取远程仓库使得本地仓库同步远程仓库的最新状态

复制代码
git pull origin main

出现下面的错误

错误信息 错误类型
! rejected main -> main (non-fast-forward) 远程领先,本地落后
fatal: refusing to merge unrelated histories 本地和远程无共同祖先
error: The following untracked working tree files would be overwritten by merge: main1.py 未跟踪文件与远程冲突

导致下面拉取不成功

二、根本原因分析

复制代码
┌─────────────────────────────────────────────────────────┐
│  远程仓库历史 (github)                                   │
│  init → README.md → .gitignore → ... (有初始文件)        │
│                                                          │
│  本地仓库历史 (D:\git_local_repository\...)              │
│  init → 项目代码 → main1.py → ... (独立开发)             │
│                                                          │
│  ⚠️ 两个仓库没有共同祖先提交!                            │
│  ⚠️ 且 main1.py 在本地是"未跟踪"状态,远程也有同名文件     │
└─────────────────────────────────────────────────────────┘

核心原因

  1. 远程仓库创建时自动生成了 README.md.gitignore 等初始文件

  2. 本地仓库是独立初始化的,两个仓库历史完全分叉

  3. 文件 main1.py 在本地未执行 git add,处于 untracked 状态,但远程合并需要覆盖它

三、解决方案

方案一:保留本地代码,合并不相关历史(推荐)

复制代码
# 将冲突的未跟踪文件加入版本控制
git add main1.py
git commit -m "添加 main1.py 本地版本"

# 拉取远程并允许合并不相关历史
git pull origin main --allow-unrelated-histories

# 如有冲突,手动解决(编辑冲突文件,删除 <<<< ==== >>>> 标记)
git add <冲突文件>
git commit -m "合并远程 main 分支,解决冲突"

# 推送到远程
git push -u origin main

方案二:先备份本地文件,拉取远程后重新添加

复制代码
# Step 1: 备份本地冲突文件
mv main1.py main1.py.local.backup

# Step 2: 拉取远程代码
git pull origin main --allow-unrelated-histories

# Step 3: 恢复本地文件(如有冲突需手动合并)
mv main1.py.local.backup main1.py
git add main1.py
git commit -m "恢复本地 main1.py"
git push origin main

四、预防建议

1. 新建项目推送到已有初始文件的远程仓库

先git clone克隆远程仓库,再添加代码

2. 本地已有项目要关联远程

远程创建空仓库(不勾选README),再 git push -u origin main

-u--set-upstream 的简写。

作用 :建立本地分支和远程分支的关联关系,以后可以简化命令。

3. 多人协作

推送前先 git pull ,保持本地最新

4. 大文件(如:模型权重.pt

使用Git LFS或云存储,不要直接放 Git

相关推荐
Hvitur3 小时前
Linux安装Git【离线安装】
git
howard20057 小时前
6.4 Git安装与配置
git·安装配置
tryCbest11 小时前
git实现前后端分离项目提交同一个仓库
git·gitee
Mr.朱鹏12 小时前
Git 仓库同时推送到 Gitee 与 GitHub 配置指南
git·gitee·开源·github
Flynt1 天前
HN 382分热文里的终端小技巧,我实测了一遍,git pickaxe 最值
git·命令行
横木沉2 天前
IntelliJ IDEA 无法识别 Git:Git is not installed 问题解决
java·git·github·intellij-idea
为你学会写情书2 天前
Git 学习指南:从日常命令到多人协作与提交规范
git
东小黑2 天前
Git 仓库操作与 VSCode 使用指南
git·vscode·gitee
拼图2092 天前
Git常用语法
分布式·git·学习
ShineWinsu2 天前
对于Git:基础操作的超详细保姆级解析
linux·c++·git·面试·备份·管理·版本控制器