git操作三- 解决冲突,删除文件,查看版本间更改了什么内容
问题
我本地的main分支有个审批.docx的文档,怎么合并到我本地的seri分支。
涉及命令:
- git branch
- git log --oneline --graph
- git fetch
| 命令 | 作用 | 能看到提交历史? | 能看到本地 / 远程关系? |
|---|---|---|---|
| git branch -vv | 看状态、看同步 | ❌ 不能 | ✅ 能 |
| git log --graph | 看提交历史、看图 | ✅ 能 | ❌ 不能(不加 --all) |
git 名词
| 英文 | 中文 | 含义 |
|---|---|---|
| working tree | 工作区 | 你当前编辑的代码 |
| index | 暂存区 | git add 后的区域 |
| tree | 版本树 | 提交的历史版本 |
| blob | 文件对象 | Git 里的文件 |
| changes | 差异 / 改动 | 不同的地方 |
| 名称 | 官方英文 | 作用 | 存放什么 | 生命周期 |
|---|---|---|---|---|
| 暂存区 | Index / Stage | 提交前的临时存放 | git add 后的文件 | 会被 git commit 永久提交掉 |
| 储藏区 | Stash | 临时切走、保存未完成代码 | 未 add、已 add、未提交的所有代码 | 手动 git stash pop 才会恢复 |
问题分析
本地有两个分支:
• main:包含修改后的 每日临时思考记录/git配置协作者审批.docx
• seri:需要合并 main 分支的这个文档变更
推荐方案:合并 main 到 seri 分支
切换到 seri 分支
运行
git checkout seri合并 main 分支到 seri
运行
git merge main
•这个命令会把 main 分支的所有提交(包括你修改的 .docx 文件)合并到 seri 分支;
• 如果没有冲突,Git 会自动完成合并;
• 如果有冲突,手动解决后执行 git add 和 git commit 即可。
备选方案:只合并单个文件(如果不想合并全部提交)
如果你只想把 main 分支的这个文档单独拿到 seri 分支,而不是合并所有提交,可以用 git checkout 提取文件
运行
git checkout seri从 main 分支检出目标文件(路径要和 git status 里一致)
运行
git checkout main – “每日临时思考记录/git配置协作者审批.docx”提交到 seri 分支
运行
git add “每日临时思考记录/git配置协作者审批.docx”
git commit -m “从 main 分支合并审批文档到 seri”
扩展
git merge 和 git checkout – file 这两种方式的区别
问题分析
git merge main 的核心逻辑是:将「本地的 main 分支」合并到「当前所在的本地 seri 分支」,和「远端的 main 分支」没有直接关系。
git merge main 的精准含义
• 操作范围:仅在本地仓库内执行,不涉及任何远程仓库(远端 main 分支的内容不会自动参与);
• 合并逻辑:把「本地 main 分支的最新提交」,合并到「你当前 checkout 的分支(这里是 seri)」;
• 类比理解:就像你有两个本地文件夹(main 文件夹、seri 文件夹),git merge main 是把 main 文件夹里的最新修改,同步到 seri 文件夹里。
关键区分:本地 main vs 远端 main
| 命令 | 合并的分支来源 | 适用场景 |
|---|---|---|
| git merge main | 本地 main 分支 | 你已经把远端 main 的内容拉到本地,想把本地 main 的修改合并到本地 seri |
| git merge origin/main | 远端 main 分支 | (origin 是远程仓库别名) 不想先更新本地 main,直接把远端 main 的最新内容合并到本地 seri |
确保合并的是「远端最新的 main 内容」到本地 seri,正确步骤是:
- 先更新本地 main 分支(拉取远端 main 的最新内容)
git checkout main
git pull origin main把远端 main 同步到本地 main - ** 切回 seri 分支**
git checkout seri - ** 合并本地 main(已同步远端)到 seri**
git merge main
补充说明(避坑)
- 合并前先拉取:如果你的本地 main 分支不是最新的(比如远端 main 有其他人提交的内容),直接 git merge main 只会合并「本地旧的 main 内容」,而非远端最新;
- 冲突处理:如果 seri 分支和 main 分支修改了同一个文件(比如你的审批.docx),Git 会提示冲突,你只需要:
- 打开冲突文件,手动保留需要的内容;
- 执行 git add 冲突文件 → git commit 完成合并;
总结
- git merge main 仅合并本地 main 分支到当前本地 seri 分支,和远端无关;
- 若要合并远端 main 到本地 seri,需先 git pull origin main 更新本地 main,再执行 merge;
- 核心逻辑:merge 操作的对象是「本地分支」,远程分支需先拉取到本地才能参与合并。
git删除仓库中的文件
本地删除文件 + 提交到 Git,一步到位。
最常用、最推荐的命令(直接删文件 + 提交)
运行:
- git rm 文件名
- git commit -m “删除不需要的文件”
- git push
git rm 文件名
→本地文件删掉 + Git 也记录删除
git commit
→ 把删除操作保存成一个版本
git push
→ 把删除同步到远程(GitHub/GitLab/Gitea)
如果你已经手动把文件删了(右键删除)
那就用这个:
- git add -u
- git commit -m “删除文件”
- git push
git add -u 会自动把所有已删除的文件记录到 Git 里
删除文件夹(目录)
- git rm -r 文件夹名
- git commit -m “删除文件夹”
- git push
只想让 Git 不再追踪,但保留本地文件
git rm --cached 文件名
这个不会删你电脑上的文件,只是Git 不再管它。
总结
想彻底删文件:git rm 文件名
已经手动删了:git add -u
删文件夹:git rm -r 文件夹
只取消追踪、保留文件:git rm --cached 文件名
、、、、、、、、、、、、、、、、、、、、、、、
查看某个版本 和 它前一个版本的差异
本地删除文件 + 提交到 Git,一步到位。
最常用:查看具体修改了哪些代码
运行:
git show 版本号
作用
- 自动对比 这个版本 和 前一个版本
- 直接显示:改了哪些文件、加了什么、删了什么
如:git show 6dcceda1f07337eaf0aee6754ccbe55982421e15
只看修改了哪些文件(不看代码细节)
那就用这个:
git show --stat 版本号
输出干净整洁:
几个文件被修改
增加多少行
删除多少行
如果你想看当前最新版本 vs 上一版
git show
不加任何版本号,默认就是当前最新版本 vs 前一个版本
另一个经典对比命令(效果一样)
git diff 版本号^ 版本号
^ 代表前一个版本
git branch -vv
作用:看当前所有分支的同步状态
本地落后?超前?分叉?和远程对没对齐?
什么时候最实用
- 每天上班第一件事,看哪些分支要同步
- 想知道自己当前分支能不能 push
- 想知道本地和远程差几个提交
git log --oneline --graph
作用
看完整的提交树、分叉、合并历史
什么时候用
- push 被拒绝,查分叉原因
- 解决冲突后看历史
- 想知道分支到底发生了什么
- 排查 Git 问题必用
总结
看详细代码修改:git show 版本号
看修改了哪些文件:git show --stat 版本号
看当前最新版改了啥:git show
终极真理:凡是涉及远程,必须先 fetch。
这一步是 “刷新”!
就像你看网页要刷新,看文件要刷新一样!只要你想知道:
- 远程有没有新代码?
- 我能不能 push?
- 我要不要 pull?
- 本地和远程同步了吗?
- 必须先执行:
你本地的 origin/seri、origin/main 都是 “旧照片”!
只有 git fetch 才能把它变成实时直播!
不 fetch → 你看到的是缓存数据
fetch 后 → 你看到的是服务器真实数据
不 fetch 就操作,等于闭着眼睛开车!一定翻车!
所有操作,都应该按这个顺序:
- fetch(刷新)
git fetch - 查看状态(判断要干嘛)
git branch -vv或git status - 决定:pull /merge/rebase /push
- git fetch 刷新远程状态(必须!)
- git branch -vv 看有没有人更新代码
- git pull --rebase 有更新就拉下来(没有也可以执行)
- 更新,填写代码
- git add .
- git commit -m “提交”
- git push 推上去
本地分支 vs 远程分支
fetch 是刷新
branch -vv 是看同步状态
log --graph 是看历史
能不能 push 只看自己的分支
先 fetch 再操作 = 永不翻车
