跳到正文

容易混淆的问题 ​

这些问题都出在同一处:命令名字接近,改的却是模型里不同的层。

容易混淆区别
pull / fetch前者合并或变基,后者只更新 origin/*
reset --hard / restore移动分支指针 vs 只改工作区或索引
revert / reset追加反向提交 vs 改写历史
分支 / tag会随提交前移 vs 固定指向某个提交
checkout / switch / restore老命令身兼两职,新命令各管一件事
分离 HEAD 下的提交不在任何分支上,切走就只剩 reflog
变基后推送历史已分叉,需要 --force-with-lease
.gitignore 不生效文件已被跟踪,先 git rm --cached
origin/main / main远端快照 vs 本地分支,互不自动同步
merge / rebase保留分叉 vs 拉成直线,哈希是否改变

两个补充 ​

git commit 只提交索引。 忘记 git add 时新文件不会进提交,git status 里仍是未跟踪。这是初学者最常见的「提交了但没提交」。

reset --hard 不删对象。 它只让分支后退,提交仍可通过 git reflog 找回。真正危险的是 git clean,未跟踪文件不在对象库里,删掉没有任何退路。

让忽略规则对已跟踪文件生效,先把它们从索引里摘掉:

bash
git rm --cached .env
git rm -r --cached build/