git restore --source 提交id 和 git reset --hard 提交id 有什么区别

张开发
2026/4/10 2:31:11 15 分钟阅读

分享文章

git restore --source 提交id 和 git reset --hard 提交id 有什么区别
这两个命令长得像、都能“回到过去”但核心逻辑、操作范围、安全性天差地别一句话先点破✅git restore --source 提交id文件级操作只恢复文件内容不删提交历史、不改动分支安全无风险❌git reset --hard 提交id仓库级操作直接回退整个版本删除提交历史、清空所有修改高危命令下面用通俗解释核心区别场景示例讲透一看就懂一、核心本质区别最关键1.git restore --source commit-id作用把指定文件或所有文件恢复到「某次提交」的状态范围只动文件内容分支/提交历史完全不动之前的所有提交都还在安全性✅非常安全误操作可轻松找回2.git reset --hard commit-id作用把整个仓库强制回退到「某次提交」的状态范围动分支指针 暂存区 工作区全部内容分支/提交历史直接删除该提交之后的所有提交历史被改写安全性❌极度危险未提交的修改、后续提交会直接丢失二、3个维度直观对比维度git restore --source 提交idgit reset --hard 提交id操作级别文件级只改文件仓库级改整个版本提交历史完全保留不删除任何提交删除目标提交之后的所有提交工作区/暂存区只替换指定文件其他修改保留强制清空所有未提交修改直接丢失分支指针不动停在当前最新提交直接跳转到目标提交分支位置被改写风险等级安全无数据丢失风险高危易丢失代码核心用途修复单个/多个文件到历史版本彻底废弃后续所有修改回退整个项目版本三、通俗比喻秒懂git restore --source 你把笔记本里的某一页撕下来换回旧的那一页笔记本的其他页、页码都没变git reset --hard 你把笔记本直接翻到某一页后面所有页全部撕掉扔掉再也找不回来四、实际用法示例1. 安全用法git restore --source场景只想把README.md恢复到 3天前的提交id: a1b2c3其他文件不动# 只恢复单个文件gitrestore--sourcea1b2c3 README.md# 恢复当前目录所有文件不删提交gitrestore--sourcea1b2c3.✅ 结果只有文件内容变了提交历史、分支都完好2. 高危用法git reset --hard场景项目写崩了后面3次提交全不要了彻底回到版本 a1b2c3gitreset--harda1b2c3❌ 结果分支指针直接跳到 a1b2c3a1b2c3 之后的3次提交全部消失工作区所有未提交修改直接清空五、总结必记只改文件、想保留提交历史→ 用git restore --source 提交id安全首选彻底废弃后续所有修改、回退整个项目→ 用git reset --hard 提交id谨慎使用新手绝对不要随便用git reset --hard极易丢代码

更多文章