二进制文件冲突是什么
图片、压缩包、Office 文档、编译产物这类二进制文件无法按行合并,Git 只能判断「两边都改了」,冲突时只能整份二选一。要让它正确处理,需要在 .gitattributes 中声明 binary 属性,或者为特定文件类型指定专用的合并驱动。
基本信息
| 冲突表现 | git status 显示 both modified,diff 只提示「二进制文件不同」 |
|---|---|
| 处理方式 | 用 git checkout --ours 或 --theirs 取一侧,再 git add 标记已解决 |
| 预防手段 | 在 .gitattributes 标记 binary,跳过行级比较与文本转换 |
| 体积控制 | 大二进制文件应交给 Git LFS 或独立制品仓库,避免仓库膨胀 |
| 平台差异 | 各系统行为一致,Windows 与 Linux 无差别 |
典型使用场景
- 设计稿与图片资源被多人同时替换
- 游戏项目的美术、音频资源版本更新
- Office 文档、演示文稿在仓库内协作
- 编译产物或安装包被误提交进仓库
- 机器学习数据集或模型文件按版本管理
常用示例
常用示例
git status # 看到 both modified,说明两侧都改过
git diff --stat # 二进制文件只列文件名,没有逐行差异
git checkout --ours -- assets/logo.png # 保留当前分支的版本
git add assets/logo.png # 标记该文件冲突已解决
git commit # 完成合并
# 预防:声明二进制类型,避免后续再尝试行级合并
printf '*.png binary\n*.xlsx binary\n' >> .gitattributes取用命令与适用场景
| 命令 | 取哪一侧 | 何时使用 |
|---|---|---|
| git checkout --ours -- 文件 | 当前分支(合并目标) | 我方版本更新,对方是误改 |
| git checkout --theirs -- 文件 | 被合并进来的分支 | 确认对方版本才是最终结果 |
| git checkout -m -- 文件 | 重建冲突标记 | 想撤掉手工编辑重新处理 |
binary 属性只影响比较与合并行为,不改变存储方式:它不会压缩内容,也不减少仓库体积,大文件仍然需要 LFS 或制品库来控制。
变基过程中两侧的含义会反转:变基时被取用的「theirs」指你正在重放的提交,「ours」指被重放的基线,动手前先确认当前是哪一种操作。