当前位置: 首页 > news >正文

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.jsonpackage-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

  1. 暂存你当前的 package-lock.jsonpackage.json,保护它们

    git add package-lock.json package.json

  2. 然后执行 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}


🔄 总结你要的操作顺序:

  1. git stash apply
  2. VSCode 调整 & 预览成果
  3. 挑选需要的内容 → git addgit commit
  4. git stash drop(可选)


http://www.mrgr.cn/news/95463.html

相关文章:

  • C语言【文件操作】详解中(会使用fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite函数)
  • 【day1】数据结构刷题 链表
  • 通俗易懂搞懂@RequestParam 和 @RequestBody
  • 细说卫星导航:测距定位原理
  • 【算法笔记】图论基础(一):建图、存图、树和图的遍历、拓扑排序、最小生成树
  • TCP | 序列号和确认号 [逐包分析] | seq / ack 详解
  • 介绍一个测试boostrap表格插件的好网站!
  • 自动驾驶系统的车辆动力学建模:自行车模型与汽车模型的对比分析
  • [学习笔记] VM虚拟机安装Ubuntu系统
  • Axure大屏可视化模板:赋能多领域,开启数据展示新篇章
  • [AI速读]混合验证方案:如何高效解决RISC-V向量扩展的验证难题
  • 文献分享: XTR——优化Token级检索的高效多向量模型
  • 【数学建模】最大最小值模型详解
  • 子集和问题---递归搜索
  • Resume全栈项目(.NET)
  • 【第22节】windows网络编程模型(WSAAsyncSelect模型)
  • 计划变动的坐标系-基线
  • 众乐影音-安卓NAS-Player的安装和设置说明
  • 蓝桥杯 之 第27场月赛总结
  • vim的一般操作(分屏操作) 和 Makefile 和 gdb