first commit
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
# 冲突处理详解
|
||||
|
||||
## 识别冲突
|
||||
|
||||
当 Git 无法自动合并时,会标记冲突:
|
||||
|
||||
```
|
||||
<<<<<<< HEAD
|
||||
// 当前分支的代码
|
||||
const name = '张三'
|
||||
=======
|
||||
// 要合并的分支的代码
|
||||
const name = '李四'
|
||||
>>>>>>> feature/user-management
|
||||
```
|
||||
|
||||
## 解决冲突步骤
|
||||
|
||||
### 1. 查看冲突文件
|
||||
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
### 2. 手动编辑文件,解决冲突
|
||||
|
||||
打开冲突文件,找到冲突标记(`<<<<<<<`、`=======`、`>>>>>>>`),手动编辑选择保留的内容或合并两者。
|
||||
|
||||
### 3. 标记已解决
|
||||
|
||||
```bash
|
||||
git add <file>
|
||||
```
|
||||
|
||||
### 4. 完成合并
|
||||
|
||||
```bash
|
||||
# 对于 merge 冲突
|
||||
git commit
|
||||
|
||||
# 对于 rebase 冲突
|
||||
git rebase --continue
|
||||
```
|
||||
|
||||
## 冲突处理策略
|
||||
|
||||
### 保留当前分支版本
|
||||
|
||||
```bash
|
||||
git checkout --ours <file>
|
||||
git add <file>
|
||||
```
|
||||
|
||||
### 保留传入分支版本
|
||||
|
||||
```bash
|
||||
git checkout --theirs <file>
|
||||
git add <file>
|
||||
```
|
||||
|
||||
### 放弃合并
|
||||
|
||||
```bash
|
||||
# 放弃 merge
|
||||
git merge --abort
|
||||
|
||||
# 放弃 rebase
|
||||
git rebase --abort
|
||||
```
|
||||
|
||||
## 预防冲突的最佳实践
|
||||
|
||||
1. **及时同步代码** - 每天开始工作前拉取最新代码
|
||||
2. **小步提交** - 频繁提交小的改动
|
||||
3. **功能模块化** - 不同功能在不同文件中实现
|
||||
4. **沟通协作** - 避免同时修改同一文件
|
||||
|
||||
## 常见冲突场景
|
||||
|
||||
### 场景1:同一文件不同位置修改
|
||||
|
||||
这种情况 Git 通常能自动合并,无需人工干预。
|
||||
|
||||
### 场景2:同一行不同修改
|
||||
|
||||
需要手动决定保留哪个版本或合并两者。
|
||||
|
||||
### 场景3:文件重命名
|
||||
|
||||
Git 通常能智能识别,但如果一个分支重命名而另一个分支修改内容,可能需要手动处理。
|
||||
|
||||
### 场景4:二进制文件冲突
|
||||
|
||||
对于图片、PDF 等二进制文件,需要决定保留哪个版本:
|
||||
|
||||
```bash
|
||||
# 保留当前分支的版本
|
||||
git checkout --ours image.png
|
||||
|
||||
# 或保留传入分支的版本
|
||||
git checkout --theirs image.png
|
||||
```
|
||||
|
||||
## 冲突解决工具
|
||||
|
||||
### 使用 merge 工具
|
||||
|
||||
```bash
|
||||
# 配置合并工具
|
||||
git config --global merge.tool vimdiff
|
||||
git config --global mergetool.prompt false
|
||||
|
||||
# 使用合并工具
|
||||
git mergetool
|
||||
```
|
||||
|
||||
### 使用 diff 工具
|
||||
|
||||
```bash
|
||||
# 查看详细差异
|
||||
git diff --ours
|
||||
git diff --theirs
|
||||
git diff --base
|
||||
```
|
||||
|
||||
## Rebase 冲突特殊处理
|
||||
|
||||
Rebase 时冲突会逐个提交出现,处理方式:
|
||||
|
||||
```bash
|
||||
git rebase develop
|
||||
# 冲突1 -> 解决 -> git add -> git rebase --continue
|
||||
# 冲突2 -> 解决 -> git add -> git rebase --continue
|
||||
# ...
|
||||
# 直到完成
|
||||
```
|
||||
|
||||
如果某一步想跳过:
|
||||
|
||||
```bash
|
||||
git rebase --skip
|
||||
```
|
||||
|
||||
如果整体想放弃:
|
||||
|
||||
```bash
|
||||
git rebase --abort
|
||||
```
|
||||
Reference in New Issue
Block a user