你刚改了几行代码,还没提交,同事喊你拉一下最新版。你敲下 git pull,手一抖回车,心里咯噔一下:我本地改的那些东西,会不会被悄悄盖掉?
默认情况下,pull 不会直接覆盖你的修改
Git 很谨慎。如果你本地有未提交的改动(比如改了 index.html 但没 git add 和 git commit),执行 git pull 时,Git 会直接报错:
error: Your local changes to 'index.html' would be overwritten by merge.它不会强行覆盖,而是停下来等你处理——要么 git stash 暂存,要么先 git add && git commit,再拉。
但有一种情况真会“覆盖”,其实是自动合并失败后丢内容
更常见也更危险的是:你已经把本地改的提交了,但和远程的修改碰上了同一段代码。这时 git pull 会尝试自动合并(merge)。如果 Git 觉得冲突太复杂,就会停在中间状态,留下 <<<< HEAD 和 >>>> origin/main 这样的标记。
这时候你没手动解决冲突、也没 git add 就直接 git commit,或者干脆用 git reset --hard 强制回退——那你的修改就真没了,不是 Git 主动覆盖你,是你自己绕过了保护机制。
想彻底避开风险?记住这三步
1. 拉之前先看看有没有未提交改动:
git status2. 有改动又不想马上提交?暂存走起:
git stash
git pull
git stash pop3. 如果拉完提示 conflict,别跳过,老老实实打开文件,删掉冲突标记,保留你要的逻辑,再 git add + git commit。
说白了,Git 不是“覆盖狂魔”,它只是个工具。你让它合并,它尽力而为;你让它硬来,它也听——但后果得自己担。