第 8 课:常见错误与解决方案
即使是经验丰富的开发者,也会经常遇到 Git 报错。
Git 本身并不可怕,大多数问题都有固定的原因和解决办法。
本课将学习开发中最常见的 Git 错误,以及对应的处理方案。
8.1 推送失败:Updates Were Rejected
这是新手最常见的问题。
执行:
git push origin main
报错:
! [rejected] main -> main (fetch first)
error: failed to push some refs
或者:
Updates were rejected because the remote contains work that you do not have locally.
为什么会出现?
假设:
远程仓库:
A → B → C
本地仓库:
A → B
同事已经提交:
C
但你本地没有。
此时直接:
git push
Git 会拒绝。
原因:
防止覆盖别人的代码
正确解决方案
先拉取:
git pull origin main
如果没有冲突:
git push origin main
即可。
流程:
git pull
↓
解决冲突(如果有)
↓
git push
错误示范
很多人直接:
git push -f
这是:
强制覆盖远程仓库
风险:
可能覆盖同事代码
企业项目中慎用:
git push --force
8.2 Pull 时产生冲突
执行:
git pull
出现:
CONFLICT (content)
Automatic merge failed
说明:
发生代码冲突
原因:
你和同事修改了同一位置。
例如:
同事:
String name = "Tom";
修改:
String name = "Jerry";
你修改:
String name = "Mike";
Git 无法判断保留谁。
解决步骤
打开冲突文件:
<<<<<<< HEAD
String name = "Mike";
=======
String name = "Jerry";
>>>>>>> main
手动修改:
String name = "Jerry";
或者:
String name = "Mike";
删除:
<<<<<<<
=======
>>>>>>>
标记。
提交:
git add .
git commit -m "解决代码冲突"
8.3 提交信息写错了
例如:
提交:
git commit -m "fix buggggg"
发现拼写错误。
修改最近一次提交:
git commit --amend -m "fix bug"
查看:
git log --oneline
即可看到新信息。
注意事项
如果已经:
git push
到远程。
修改后需要:
git push --force
团队开发时需谨慎。
8.4 不小心提交了不该提交的文件
例如:
.env
里面包含:
数据库密码
Redis密码
JWT密钥
结果:
git add .
git commit
提交了。
从 Git 中移除
执行:
git rm --cached .env
提交:
git commit -m "移除环境配置文件"
然后:
.env
加入:
.gitignore
以后不会再次提交。
8.5 删除文件但保留本地文件
普通删除:
git rm file.txt
效果:
Git删除
本地也删除
如果只想:
Git删除
本地保留
执行:
git rm --cached file.txt
8.6 想查看某个文件是谁写的
非常实用。
执行:
git blame UserService.java
输出:
a1b2c3d (张三 2026-06-01) public class UserService
b2c3d4e (李四 2026-06-02) login()
作用:
查看每一行是谁修改的
企业排查 Bug 高频使用。
8.7 想查看是谁删除了代码
查看历史:
git log -p 文件名
查看:
谁删了
什么时候删的
为什么删的
8.8 误删文件怎么办?
假设:
rm UserService.java
文件没提交。
恢复:
git checkout -- UserService.java
或者新版:
git restore UserService.java
恢复到最近一次提交状态。
8.9 提交后发现代码丢了
查看历史:
git log --oneline
找到正确版本:
a1b2c3d
恢复:
git reset --hard a1b2c3d
⚠️ 注意:
会丢弃当前未提交修改
8.10 查看所有操作记录
即使:
reset
删除分支
误操作
也能找回来。
查看:
git reflog
输出:
a1b2c3d HEAD@{0}
b2c3d4e HEAD@{1}
c3d4e5f HEAD@{2}
作用:
记录HEAD移动历史
堪称:
Git 后悔药
8.11 Git 最常见报错总结
远程领先:
Updates were rejected
解决:
git pull
git push
冲突:
CONFLICT
解决:
手动修改
git add
git commit
提交信息错误:
commit message wrong
解决:
git commit --amend
误提交文件:
git rm --cached
误删文件:
git restore 文件名
误回退:
git reflog
8.12 企业开发中的经验
不要轻易:
git push -f
不要直接修改:
main
提交前:
git diff
检查代码。
提交后:
git log --oneline
检查记录。
出现问题:
git reflog
先看历史。
大多数 Git 问题:
都能恢复
课后练习(必做)
练习 1:创建远程仓库
在 Gitee 或 GitHub 创建:
git-demo
空仓库。
练习 2:克隆项目
git clone 仓库地址
练习 3:创建 README
创建:
README.md
内容:
# 我的第一个 Git 项目
提交:
git add .
git commit -m "初始化项目"
推送:
git push origin main
练习 4:创建功能分支
git checkout -b feature/demo
修改:
这是功能分支的修改
提交:
git add .
git commit -m "添加功能分支内容"
推送:
git push -u origin feature/demo
练习 5:模拟 Pull Request
提交 PR。
合并到:
main
练习 6:同步主分支
git checkout main
git pull origin main
练习 7:删除功能分支
本地:
git branch -d feature/demo
远程:
git push origin --delete feature/demo
本课总结
掌握以下命令:
拉取并解决推送失败:
git pull
git push
修改提交信息:
git commit --amend -m "新的提交信息"
从 Git 中移除文件:
git rm --cached 文件名
查看文件责任人:
git blame 文件名
查看操作历史:
git reflog
恢复误删文件:
git restore 文件名
牢记:
遇到报错不要慌
先看提示
再查历史
绝大多数情况都能恢复
至此,你已经完成 Git 基础到团队协作的完整学习路线。
你已经具备:
- 独立管理代码仓库
- 团队协作开发
- 分支管理
- 冲突处理
- Bug 修复
- 问题排查
这些能力已经足以应对绝大多数校招、实习和中小型项目开发场景。