git | 回退版本 并保存当前修改到stash,在进行整合。[git checkout | git stash 等方法 ]
目录
一些常见命令:
git 回退版本
一、临时回退(不会修改历史,可随时回到当前版本)
方法1:git checkout HEAD~1
问题:处于 detached HEAD 状态下提交的,无法直接 git push
✅ 选项 1:将当前状态保存为一个新分支(推荐)
✅ 选项 2:强制推送到某个远程分支
二、永久回退(改变分支指向)
方法2:git reset
1. 保留修改(soft回退)
2. 丢弃暂存区,保留工作区修改(mixed,默认)
3. 全部丢弃(hard)
★ 保险操作:先备份一份修改
排查package.json等环境是否有影响?
📦 步骤1:确认 package.json 有没有变
方法1:查看文件改动历史
方法2:比较当前版本与上一个版本的 package.json 差异
🛠 步骤2:排查 package-lock.json 差异
🧪 步骤3:强制同步依赖
→ 这会根据回退后的 package-lock.json,重新整理 node_modules,让环境完全对应。
如何彻底回退 package.json 和 package-lock.json?
★ 选择性的应用 stash —— 边查看 stash 中的更改,一边在 VSCode 里边调整、边预览成果
🔍 1. 查看 stash 中的内容(不影响当前代码)
👨💻 2. 临时应用 stash 内容(非永久)→ 可边修改边预览
git stash apply 存在冲突:git stash apply error: Your local changes to the following files would be overwritten by merge:
编辑
🔧 3.★ 如何边修改边查看效果?—— 进入 VSCode 查看和编辑代码
💾 4. 提交你要的改动(手动提交)
⚠️ 注意:——处理完,可丢弃stash(git stash drop stash@{0})
🔄 总结你要的操作顺序:
一些常见命令:
git log --oneline 查看提交记录,确定当前的commit
git checkout COMMIT_ID 退回到COMMIT_ID的版本
git status 当前修改了哪些文件
git diff 查看具体改动内容
git stash drop 放弃 stash
的内容(删除 stash区的备份)
git stash pop 还原 stash
的内容
操作 | 作用 |
---|---|
git stash | 保存修改 |
git stash pop | 还原修改并删除 stash 记录 |
git stash apply | 还原修改但保留 stash 记录 |
git stash list | 查看所有 stash |
git stash -u | 保存所有修改(包括新文件) |
git stash show -p | 查看 stash 的具体代码变动 |
grep -r "xxxx" . | 全局搜索项目中的某个引用(如xxxx) |
git 回退版本
一、临时回退(不会修改历史,可随时回到当前版本)
方法1:git checkout HEAD~1
将工作区回退到上一个版本,但不会改变分支指向。
git checkout HEAD~1
- 缺点:是游离HEAD状态(detached HEAD),不能直接提交,需要创建新分支或回到当前版本。
后续问题:处于
detached HEAD
状态下提交的,无法直接git push
两种解决方法:
✅ 选项 1:将当前状态保存为一个新分支(推荐)
这样你可以继续开发、提交,也可以推送到远程。
git switch -c xxxx
git push origin xxx
📌 说明:
xxxx
是新分支名称,你可以自定义,比如feature-xxxx
- 之后你可以在这个分支继续开发,或合并到
master
✅ 选项 2:强制推送到某个远程分支
如果你就是想直接推送到
origin/master
(慎用,可能覆盖远程):
git push origin HEAD:master
⚠️ 注意:
- 如果远程
master
有别人提交,这样会有冲突或失败- 推荐只在你确定远程可以被覆盖时用
二、永久回退(改变分支指向)
方法2:git reset
1. 保留修改(soft回退)
git reset --soft HEAD~1
- 回退到上一个版本,保留修改内容到暂存区。
2. 丢弃暂存区,保留工作区修改(mixed,默认)
git reset --mixed HEAD~1
- 暂存区回退,工作区保留修改(适合撤销提交)。
3. 全部丢弃(hard)
git reset --hard HEAD~1
- 完全回退到上个版本,暂存区和工作区的修改全部丢弃。
- 注意:慎用,数据无法恢复!
★ 保险操作:先备份一份修改
如果你还是不确定,建议先保存修改到分支或补丁:
git stash
→ 然后你就可以安全 git reset --hard HEAD~1
,之后再用:
git stash pop
把修改还原回来。
git stash
= 暂时存放修改,不丢失,方便回退或切换分支🗂 查看所有 stash:
git stash list
git stash
只保存已修改的内容(未跟踪的新文件不会保存,需要加-u
参数)。- 要备份所有修改(包括新文件):git stash -u
排查package.json等环境是否有影响?
📦 步骤1:确认
package.json
有没有变方法1:查看文件改动历史
git log package.json
- 你会看到所有修改
package.json
的提交记录(含时间、commit id、提交人)。- 看看最近一次修改是在回退的版本之前还是之后。
方法2:比较当前版本与上一个版本的
package.json
差异
git diff HEAD~1 package.json
- 你会看到当前版本与上一个版本之间
package.json
的具体差异。- 如果没有输出 → 没变。
- 如果有依赖被添加或删除 → 需要重新
npm install
。🛠 步骤2:排查
package-lock.json
差异同理:
git diff HEAD~1 package-lock.json
- 这能告诉你依赖的版本号是否有变化。
- 重点:
package-lock.json
改了,node_modules
没变,运行时可能就会异常。🧪 步骤3:强制同步依赖
无论
package.json
是否变,保险操作:
npm install
→ 这会根据回退后的
package-lock.json
,重新整理node_modules
,让环境完全对应。
如何彻底回退 package.json
和 package-lock.json?
git log --oneline 查看提交记录,确定当前的commit
git show abc1234:package.json 找到回退的目标版本,如 ID 是
abc1234,
看当时的package.json
git checkout abc1234 -- package.json package-lock.json
确认没问题后,用下面命令恢复可以再用
grep "eventemitter3" package.json
检查确认
★ 选择性的应用 stash —— 边查看 stash
中的更改,一边在 VSCode 里边调整、边预览成果
这样你就能判断哪些是「可以要的」,哪些是「舍弃的」
🔍 1. 查看 stash
中的内容(不影响当前代码)
在终端中输入:
git stash list
输出示例:
stash@{0}: WIP on master: 26851d3 拖到画布上方后消失(数据传递?)
👉 查看详细改动内容:
git stash show -p stash@{0}
这个会显示所有修改过的文件内容,便于你判断。
👨💻 2. 临时应用 stash
内容(非永久)→ 可边修改边预览
git stash apply
- 现在所有
stash
的改动已回来了,但还没提交,你可以:- 在 VSCode 中逐个文件对比(左 Git 栏 → 点击文件)
- 预览效果(运行
vite dev
之类),验证哪些改动你想保留
git stash apply
存在冲突:git stash apply error: Your local changes to the following files would be overwritten by merge:解决:暂存你要保留的文件后再
stash apply
暂存你当前的
package-lock.json
、package.json
,保护它们:
git add package-lock.json package.json
然后执行
stash apply
时使用--index
参数,避免覆盖已暂存的文件:
git stash apply --index
⚠️ 说明:
--index
会尽量恢复 stash 中的文件,但由于你已经暂存了package-lock.json
,它不会被覆盖。stash 中的其他代码文件已经被成功“应用”到了你的工作区(但未提交);
🔧 3.★ 如何边修改边查看效果?—— 进入 VSCode 查看和编辑代码
打开 VSCode → 左侧源代码管理 (SCM) 面板,你会看到所有的改动文件,可以:
- 双击文件查看每一处改动(与当前版本对比)
- 手动修改文件内容
- 保存后运行你的项目查看效果
💾 4. 提交你要的改动(手动提交)
git add 你要的文件
git commit -m "从 stash 中提取部分改动,修复 X 功能"
⚠️ 注意:——处理完,可丢弃stash(git stash drop stash@{0}
)
如果你确认所有需要的内容都已处理,可以丢弃 stash
:
git stash drop stash@{0}
🔄 总结你要的操作顺序:
git stash apply
- VSCode 调整 & 预览成果
- 挑选需要的内容 →
git add
→git commit
git stash drop
(可选)