按文件取一侧是什么
git checkout --ours 与 --theirs 可以把冲突文件的整体内容取成某一侧的版本,而不是逐行挑选。它适合「整文件以某一边为准」的场景:锁文件、自动生成的配置、构建产物这类文件没有逐行合并的意义,整体取一侧更省事也更容易验证。
ours 和 theirs 指谁
这两个名字是相对当前操作而言的。合并时,ours 是当前分支、theirs 是被合入分支;变基时则相反:ours 是变基目标(上游)分支,theirs 是你的待放提交。执行前先看 git status 确认自己在做什么操作,再决定取哪一侧。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 语法 | git checkout --ours 或 --theirs -- <路径> |
| 作用 | 把整个文件取成某一侧的版本 |
| 后续动作 | git add <路径> 标记已解决 |
| 合并时 | ours 是当前分支,theirs 是被合入分支 |
| 变基时 | 两侧含义与合并相反 |
典型使用场景
- 锁文件冲突:依赖锁文件重新生成即可,取一侧再重装
- 生成物冲突:构建产物、压缩包无法逐行合并
- 配置文件冲突:以主干版本为准,避免混入本地调整
- 语言包与文档:整文件替换比逐行挑选更清晰
- 快速止血:冲突量大时先取一侧保证能构建,再逐项修正
常用示例
常用示例
git status # 先确认当前操作与两侧含义
git checkout --ours -- config/lock.json # 整文件取我方版本
git checkout --theirs -- src/defaults.json # 整文件取对方版本
git add config/lock.json # 标记已解决
git show :1:src/app.py # 查看冲突的公共祖先版本
git diff --staged -- config/lock.json # 复核最终取到的内容两侧分别是谁
| 操作 | ours | theirs |
|---|---|---|
| merge | 当前分支 | 被合入的分支 |
| rebase | 变基目标(上游)分支 | 你的待放提交 |
| cherry-pick | 目标分支 | 被拣选的提交 |
| revert | 当前分支 | 待回退内容的反向 |
在变基过程中,ours 与 theirs 的含义与合并相反,凭直觉操作极易取错版本。动手前先用 git status 确认正在进行的操作。
锁文件与生成文件取完一侧后,应立即重新生成或重装依赖,避免手工挑选出的内容与实际依赖树不一致。