目录
- 前言
- 1. 基本知识
- 2. Demo
- 3. 彩蛋
前言
🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF
爬虫神器,无代码爬取,就来:bright.cn
本身暂存区有多个文件,但手快了,vscode一下子都提交了
(可我只想提交一个啊!)
为了防止走上我的老路,先带着基本知识才能进行实操!!
1. 基本知识
补充下这几个基本知识
🧾 一、git log:查看历史提交记录
🔹 作用:查看提交历史,帮助你找到 commit 的 hash 值或了解项目提交演变过程
🔹 常见用法:(命令进入之后,按q进行退出)
默认会显示详细的提交信息(commit ID、作者、时间、提交信息等)
git log
截图如下:
🔹 常用简化参数:
每个提交显示成一行:commit_id message,非常适合快速浏览历史
git log --oneline
截图如下:
图形化显示分支结构 + 简洁日志(推荐查看分支合并结构)
git log --graph --oneline --all
截图如下:
🔁 二、git reset:回退提交 (这个知识点要着重理解)
git reset 用于改变当前分支的指针位置,可以把代码状态退回到某个历史提交
🔹 三种模式:
模式 | 保留工作区代码 | 保留暂存区(index) | 用途和风险 |
---|---|---|---|
–soft | ✅ 保留 | ✅ 保留 | 回退提交,但保留已暂存的更改(适合重写提交) |
–mixed(默认) | ✅ 保留 | ❌ 清除 | 回退提交,并清除暂存区,保留工作目录 |
–hard | ❌ 丢弃 | ❌ 丢弃 | 回退提交+清除代码(危险!彻底删除修改) |
🔹 常见例子:
回退最近一次提交,代码保持已暂存状态
git reset --soft HEAD~1
回退提交,清除暂存状态,代码回到“未提交”状态
git reset --mixed HEAD~1
回退提交,并丢弃所有代码修改。(慎用!)
git reset --hard HEAD~1
回退到指定 commit
git reset --hard <commit_id>
🧭 三、git reflog:记录 Git 所有 HEAD 移动记录
🔹 作用:reflog 记录了 所有的 HEAD 和分支变动,即使你已经 reset 或 hard 删除了 commit,也可以找回
🔹 用法:
git reflog
输出类似:
9d2b6b1 HEAD@{0}: reset: moving to HEAD~1
a8ef7c3 HEAD@{1}: commit: 修复 bug
1c5e3b9 HEAD@{2}: commit: 初始提交
如果误删了某次提交,可以使用 reflog 找到 commit ID,回退回来:
git reset --hard 9d2b6b1
2. Demo
如果已经push到仓库了,需要回退并保留代码到暂存区,具体如下:
git reset --soft HEAD~1 # 回退提交
git reset # 把暂存区文件退到工作区
但是此时分支已经落后了,需要强制push一下才可!
之后提交个别文件即可,但
可能会出现出现:error: failed to push ... (non-fast-forward)
✅ 如果你确认要覆盖远程提交:
git push origin 分支名 --force
截图如下:
3. 彩蛋
一开始 git reset --hard强制回退,会清除我的暂存区!
这种情况怎么还原:
先通过git reflog
看到类似下面的内容:
a1b2c3d HEAD@{0}: reset: moving to 9a071d5d...
d4e5f6g HEAD@{1}: commit: 某某提交
这里,HEAD@{1} 就是你 reset 之前的位置
git reset --mixed HEAD@{1}
恢复 commit 状态
恢复暂存区内容
不会自动提交
💡 --mixed 可以把 commit 里的内容还原到暂存区