对于前端开发者来说,Git 是日常工作中最亲密的伙伴。无论是多人协作、版本回溯,还是部署上线,都离不开它的支持。然而,Git 的灵活也带来了不少“暗坑”——刚改好的代码不小心被覆盖、提交信息写错、分支混乱、合并冲突……几乎每个前端人都曾边改边查、边查边“挂”在搜索引擎上。

与其每次都临时 Google 浪费时间,不如提前掌握以下 10 个最常见的 Git 踩坑场景,并收藏这份速查表,让日常操作从此高效又安心。

1. 误把所有文件都 git add

场景:执行 git add . 后,发现 node_modulesdist 等不该跟踪的文件被加入暂存区。

解法:立刻用 .gitignore 排除文件,并执行 git rm -r --cached node_modules 将其从暂存区移除但仍保留在本地。之后再重新 add 需要的文件。

2. 提交后发现忘了加某个文件

场景git commit -m "fix: 修改样式" 后意识到漏了 style.css

解法:不要慌张。先 git add style.css,再执行 git commit --amend --no-edit,就能把新改动合并到上一次提交中,且无需修改提交信息。

3. 代码写在了错误的分支上

场景:在 master 上写了新功能,但本该在 feature/login 分支开发。

解法:使用 git stash 暂存当前工作区,然后切换到正确分支 git checkout feature/login,再 git stash pop 恢复代码。小技巧:git stash save "描述" 可以给暂存加备注。

4. 合并冲突时一脸懵

场景git merge 后出现 <<<<<<< HEAD 标记,不知道如何解决。

解法:用 git merge --abort 回到合并前的状态。想保留冲突标记并手动修复?打开文件,删除标记和不需要的代码后保存,再 git addgit commit。可配合 VS Code 等可视化工具快速处理。

5. 想撤销工作区未提交的修改

场景:改了一堆代码但没提交,现在想全部撤回。

解法:对单个文件执行 git checkout -- <file>,用最新版本覆盖;如果已暂存,先 git restore --staged <file> 再恢复。统一撤回所有修改:git reset --hard HEAD(慎重!会丢失工作区改动)。

6. 想回退到之前的提交并删除之后的所有修改

场景:连续提交了 3 个错误 commit,想回到第 1 个 commit 的状态。

解法git reset --hard HEAD~3 退回到前 3 个提交之前。⚠️ 注意:--hard 会彻底丢弃更改,如果已经 push 到远程,请用 git push --force(需团队协调)或用 git revert 更安全。

7. 误删分支后找不到 commit

场景git branch -D feature 删除了一个未合并的分支,发现上面的提交很重要。

解法:用 git reflog 查看所有历史操作,找到被删分支的最后一个 commit hash,然后 git checkout -b feature <hash> 即可恢复。reflog 是 Git 的“后悔药”。

8. push 后才发现包含敏感信息或大文件

场景:不小心把 .env 或 100MB 的日志文件上传到远程仓库。

解法:若未公开,可用 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch .env' 重写历史;更推荐使用 BFG Repo-Cleaner。注意:这会导致所有协作者强制拉取新历史,务必提前沟通。

9. 直接 git pull 导致本地未提交的改动被覆盖

场景:在本地改了代码没提交,执行 git pull 后提示冲突或自动合并覆盖。

解法:养成习惯——在 pull 之前先 git stashgit commit。如果已经冲突,用 git stash list 找回暂存内容。更优雅的方式:git fetch + git rebase,但同样要先处理本地变化。

10. 子模块(submodule)管理混乱

场景:克隆了一个包含子模块的项目,但子模块目录是空的,或子模块代码不是最新。

解法:克隆后执行 git submodule update --init --recursive 拉取所有子模块。想要更新子模块到最新:进入子模块目录 git pull,再回到主仓库提交变更。


速查表(收藏级)

问题 解决命令
误 add git rm -r --cached + 更新 .gitignore
补提交 git add . + git commit --amend
错分支 git stashgit checkout 正确分支git stash pop
合并冲突 git merge --abort 或手动解决后 git add && git commit
撤销工作区 git checkout -- <file>git restore <file>
回退提交 git reset --hard HEAD~n
恢复分支 git refloggit checkout -b 分支名 <hash>
清除历史大文件 git filter-branch / BFG
pull 前保护 git stash / git commit
子模块更新 git submodule update --init --recursive

写在最后

Git 的学习曲线确实有些陡峭,但绝大多数“坑”都有固定的套路可循。收藏这份速查表,当你下次再遇到类似问题时,不必再打开 Google 从头翻起——一秒定位,快速解决。希望这篇文章能帮你省下那些本应用来写代码的时间。毕竟,前端的世界里,还有更多有趣的事情等着我们去探索。