日常开发中常会遇到的一些场景与对应操作命令
约 687 字大约 2 分钟
其他
2025-07-04
删除某些Git提交记录,但是保存本地更改
仅删除 Git 提交记录(但保留所有本地文件修改),比如删除 8f2c3b570 之前的所有提交记录,保留所有文件修改(工作区内容不变),生成一个新的初始提交(包含当前所有代码)。
步骤:
重置到目标提交(保留文件修改)
git reset --soft 8f2c3b570 # 回退到该提交,但保留所有文件改动重新提交所有文件(作为新起点)
git add . # 添加所有修改
git commit -m "Initial commit (after reset)"强制推送到远程(如需)
git push --force origin <分支名> # 谨慎操作!确保团队知晓效果验证
执行 git log:只会看到新提交 "Initial commit (after reset)"
查看旧版本代码
不会破坏当前代码
git checkout a1f904183b1b6d09d0f163a68e92faf105710ae2这样你会进入 detached HEAD 状态,即“游离状态”。
代码会回到那个 commit,你可以随意查看、运行。
此时你不是在任何分支上。
查看完后,如果想回到之前的分支:
git checkout main或者 master,取决于你的分支名字
版本回退
如果你确认要让分支历史回到那个 commit,有两种方式:
保留之后的提交(安全)
git revert a1f904183b1b6d09d0f163a68e92faf105710ae2..HEAD会逐个生成新的反向提交,等效于撤销从那时到现在的修改。
提交历史仍然保留,不会丢数据。
彻底回到那个版本(危险)
git reset --hard a1f904183b1b6d09d0f163a68e92faf105710ae2强制把当前分支指针移到那个 commit,之后的提交会 全部丢弃。
如果已经推送到远程,还需要:
git push origin main --force开启仓库级大小写敏感
git config core.ignorecase false然后为了让 Git 正确认出大小写变化,你需要再提交一次文件名更改。
比如你想把:
loading.svelte改成:
Loading.svelte你要这样操作:
git mv loading.svelte temp.svelte
git mv temp.svelte Loading.svelte
git commit -m "Fix filename case"这样 Git 就会记录大小写差异。
必须通过 git mv 触发 Git 记录文件名变更,否则 Git 仍然认为这是同一个文件 → 不提交。
临时告诉 Git 检查大小写变化
如果你不想重命名两次,可以用:
git mv -f loading.svelte Loading.svelte
git commit -m "Fix case"-f(force)可以强制重命名,即使文件名只有大小写不同。
Windows 文件系统(NTFS)本身不区分大小写
即使你在 Git 开启大小写敏感,你的系统仍然不敏感。
但 Git 可以在内部记录大小写变化,不影响最终推送到 Vercel(Linux)。