|
|
|
|
@ -0,0 +1,159 @@
|
|
|
|
|
# git merge xxx --no-ff 合并分支的时候有大量冲突文件,我想要以当前分支为准,应该怎么处理
|
|
|
|
|
|
|
|
|
|
## 解决方案:
|
|
|
|
|
|
|
|
|
|
在使用 `git merge xxx --no-ff` 合并分支时,如果遇到大量冲突文件,并且你希望 **以当前分支(即你所在的分支)的内容为准**,可以按照以下步骤操作:
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 方法:以当前分支内容为准,自动接受当前分支的修改
|
|
|
|
|
|
|
|
|
|
#### 步骤 1:执行合并(会触发冲突)
|
|
|
|
|
```bash
|
|
|
|
|
git merge xxx --no-ff
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> 此时 Git 会停止合并,提示有冲突文件。
|
|
|
|
|
|
|
|
|
|
#### 步骤 2:使用 `git checkout --ours` 保留当前分支的版本
|
|
|
|
|
```bash
|
|
|
|
|
git checkout --ours .
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 这会 **自动将所有冲突文件中当前分支(HEAD)的内容保留下来**,并标记为已解决。
|
|
|
|
|
|
|
|
|
|
#### 步骤 3:标记冲突为已解决
|
|
|
|
|
```bash
|
|
|
|
|
git add .
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> 这会将所有“已用当前分支内容解决”的文件加入暂存区。
|
|
|
|
|
|
|
|
|
|
#### 步骤 4:完成合并
|
|
|
|
|
```bash
|
|
|
|
|
git commit -m "Merge branch 'xxx' into current branch, keeping current branch changes"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### 🔍 补充说明:
|
|
|
|
|
- `--ours`:表示“我这边的版本”(当前分支)
|
|
|
|
|
- `--theirs`:表示“对方分支的版本”(你要合并进来的分支)
|
|
|
|
|
- `git checkout --ours .` 是最高效的方式,尤其适用于你 **只想保留当前分支内容,不关心对方变更** 的场景。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### 🛠️ 小技巧(可选):合并后检查是否所有冲突都解决
|
|
|
|
|
```bash
|
|
|
|
|
git status
|
|
|
|
|
```
|
|
|
|
|
如果输出中没有 `Unmerged paths`,说明已全部解决。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ⚠️ 注意事项:
|
|
|
|
|
- 此方法会 **丢弃对方分支的修改**,请确保你确实不需要对方分支的内容。
|
|
|
|
|
- 若你只想保留部分文件的当前分支内容,可逐个文件处理:
|
|
|
|
|
```bash
|
|
|
|
|
git checkout --ours path/to/file.js
|
|
|
|
|
git add path/to/file.js
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
✅ 总结:
|
|
|
|
|
> 用 `git checkout --ours .` 快速以当前分支为准解决所有冲突,然后 `git add .` + `git commit` 完成合并。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
如你希望保留对方分支的某些文件,再使用 `git checkout --theirs <file>` 单独处理即可。
|
|
|
|
|
|
|
|
|
|
<br/>
|
|
|
|
|
<br/>
|
|
|
|
|
<br/>
|
|
|
|
|
<br/>
|
|
|
|
|
<br/>
|
|
|
|
|
|
|
|
|
|
# git add .之后应该怎么取消这个操作
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 解决方案:
|
|
|
|
|
如果你执行了 `git add .` 后想 **恢复**,需要根据你当前的状态来判断如何恢复。以下是常见场景及对应的恢复方法:
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 场景 1:你只是把文件加到了暂存区(staging area),但还没有提交(commit)
|
|
|
|
|
|
|
|
|
|
#### 想要恢复:**取消暂存,但保留工作区修改**
|
|
|
|
|
```bash
|
|
|
|
|
git reset HEAD .
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 这会把所有被 `git add .` 加入暂存区的文件 **移出暂存区**,但保留它们在工作区的修改。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
#### 想要恢复:**完全丢弃所有修改(包括工作区)**
|
|
|
|
|
```bash
|
|
|
|
|
git reset --hard HEAD
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ⚠️ 注意:此操作会 **彻底删除所有未提交的修改**,包括工作区和暂存区,不可逆,请谨慎使用。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 场景 2:你已经执行了 `git add .`,然后又执行了 `git commit`,想回退
|
|
|
|
|
|
|
|
|
|
#### 想要恢复:**撤销最近一次提交,保留修改在工作区**
|
|
|
|
|
```bash
|
|
|
|
|
git reset --soft HEAD~1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 这会撤销提交,但保留所有修改在暂存区,你可以重新 `git add` 和 `git commit`。
|
|
|
|
|
|
|
|
|
|
#### 想要恢复:**撤销提交,且丢弃所有修改**
|
|
|
|
|
```bash
|
|
|
|
|
git reset --hard HEAD~1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ⚠️ 会彻底删除提交和所有修改,不可逆。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### ✅ 场景 3:你误操作了 `git add .`,但还没 `commit`,想恢复到某个特定版本
|
|
|
|
|
|
|
|
|
|
#### 恢复到某个特定提交(比如上一个提交):
|
|
|
|
|
```bash
|
|
|
|
|
git checkout HEAD -- .
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> ✅ 这会将工作区的所有文件 **恢复为上一次提交时的状态**,相当于撤销所有未暂存的修改。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### 🧠 总结:常用恢复命令
|
|
|
|
|
|
|
|
|
|
| 想要的效果 | 命令 |
|
|
|
|
|
|-----------|------|
|
|
|
|
|
| 取消暂存(保留修改) | `git reset HEAD .` |
|
|
|
|
|
| 恢复工作区修改(丢弃暂存) | `git checkout HEAD -- .` |
|
|
|
|
|
| 撤销提交,保留修改(暂存区) | `git reset --soft HEAD~1` |
|
|
|
|
|
| 撤销提交,丢弃所有修改 | `git reset --hard HEAD~1` |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### 💡 小贴士:
|
|
|
|
|
- 用 `git status` 查看当前状态,判断你处于哪种情况。
|
|
|
|
|
- `git add .` 只是把文件加入暂存区,不会影响历史提交。
|
|
|
|
|
- 一旦 `commit` 了,就只能通过 `reset` 或 `revert` 回退。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
✅ 举个例子:
|
|
|
|
|
```bash
|
|
|
|
|
# 误执行了 git add .
|
|
|
|
|
# 想恢复工作区为上一个提交的状态
|
|
|
|
|
git checkout HEAD -- .
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> 这是最安全的恢复方式,不会丢失任何历史。
|