【git】提交修改、回撤、回滚、Tag 操作讲解,与reset (--soft、--mixed、--hard) 的区别

Git 提交修改、回撤、回滚、Tag 操作详解

1. git commit --amend -m "message"

作用 :修改最近一次提交的信息或内容。
适用场景:

  • 提交后发现 commit message 写错了。
  • 提交后发现 少 add 了文件,想直接加进上一次提交。

示例 1:修改 commit 信息

bash 复制代码
git commit --amend -m "修正提交信息"

💡 作用:修改上一次提交的说明,不影响文件内容。

示例 2:补充漏提交的文件

bash 复制代码
echo "new content" >> file.txt
git add file.txt
git commit --amend -m "补充提交文件"

💡 作用 :把 file.txt 的修改加进上一次提交,而不会创建新的 commit。

⚠️ 注意:

  • 如果已经 git push 了,要用 git push --force 强制推送,否则远程仓库的历史会不一致。

2. 回撤 (git reset)

命令 作用 影响
git reset HEAD~1 回撤最近一次提交,保留改动 代码还在,回到 已暂存 状态
git reset --hard [commit] 彻底回退到指定 commit,丢失所有后续修改 数据不可恢复,慎用!
示例 1:撤销最近一次提交
bash 复制代码
git reset HEAD~1

💡 作用 :撤销最近一次 commit,但文件的改动还在 暂存区 (可以 git add 重新提交)。

示例 2:强制回退到某个提交
bash 复制代码
git reset --hard abc123

💡 作用 :彻底回退到 abc123 提交后,所有更改都会丢失 ,git log 里后面的提交都不见了。

⚠️ 注意:

  • 如果已经 push 到远程,建议不要 reset --hard,否则历史会不同步!
  • 若误操作,可尝试 git reflog 找回。

3. 回滚 (git revert)

命令 作用 影响
git revert [commit] 回滚某个提交,生成一个新的撤销提交 不会丢失历史,适用于多人协作
git revert --abort 取消 revert 操作 适用于发生冲突时放弃回滚
git revert --continue 解决冲突后继续回滚 适用于手动解决冲突后继续回滚
示例 1:撤销某个提交
bash 复制代码
git revert abc123

💡 作用 :生成一个新的提交来撤销 abc123 的修改,而不会修改历史。

示例 2:遇到冲突时,放弃回滚
bash 复制代码
git revert --abort

💡 作用 :如果 git revert 过程中遇到冲突,放弃回滚,恢复到原来的状态。

示例 3:解决冲突后继续回滚
bash 复制代码
git revert --continue

💡 作用 :如果 revert 过程中遇到冲突,手动修改后执行此命令继续回滚。


4. Git Tag 操作

命令 作用
git tag 查看所有本地 Tag
git tag -a v1.0.1 -m "原神启动" 创建一个 v1.0.1 的 Tag
git push origin v1.0.1 推送 v1.0.1 到远程仓库
git push origin -d v1.0.1 删除远程 v1.0.1 Tag
示例 1:创建一个 Tag
bash 复制代码
git tag -a v1.0.1 -m "原神启动"

💡 作用 :给当前 commit 打上 v1.0.1 标签,-a 代表是带注释的标签。

示例 2:推送 Tag 到远程
bash 复制代码
git push origin v1.0.1

💡 作用 :把 v1.0.1 Tag 推送到远程仓库。

  • git tag 只是指向 commit,与分支无关,如果 远端仓库多个分支,dev 和 master 都包含这个提交,它们都会显示 tag。
示例 3:删除远程 Tag
bash 复制代码
git push origin -d v1.0.1

💡 作用 :删除远程仓库的 v1.0.1 标签。


总结表格

操作 命令 作用 影响
修改提交 git commit --amend -m "message" 修改最近一次提交 不会创建新 commit
回撤提交 git reset HEAD~1 撤销最近一次 commit,保留文件修改 提交记录消失,文件仍可修改
强制回退 git reset --hard [commit] 彻底回退到某个 commit,丢弃所有更改 不可恢复,慎用!
回滚提交 git revert [commit] 生成一个新的 commit,撤销指定提交 不会影响历史,适合多人协作
取消回滚 git revert --abort 取消 revert 操作 适用于冲突时放弃回滚
继续回滚 git revert --continue 解决冲突后继续回滚 适用于手动解决冲突后继续回滚
查看 Tag git tag 显示所有 Tag 仅本地
创建 Tag git tag -a v1.0.1 -m "message" 创建带注释的 Tag 需要推送才会到远程
推送 Tag git push origin v1.0.1 推送 v1.0.1 到远程 远程仓库可见
删除远程 Tag git push origin -d v1.0.1 删除远程 v1.0.1 远程仓库不再可见

🔹 总结

  1. git commit --amend 用于修改最近一次提交,避免新建 commit。
  2. git reset 用于回撤提交 ,但可能会影响历史 ,慎用 --hard。
  3. git revert 用于回滚提交 ,不会影响历史,适合多人协作。
  4. git tag 用于标记特定版本,方便管理版本发布。

Git reset 三种模式 (--soft、--mixed、--hard) 的区别

git reset 是 Git 中常用的命令,它用于回退提交、撤销更改,并有三种主要模式:

  • --soft:仅回退 commit,保留已暂存的修改。
  • --mixed(默认):回退 commit + add,但保留文件修改。
  • --hard:回退 commit + add + 文件修改,所有改动都被丢弃。

1. git reset --soft HEAD~1

作用

  • 回退到上一个 commit
  • 保留所有代码改动,且仍然是已暂存状态
  • 适合想重新提交 commit 的情况

示例

bash 复制代码
echo "hello" > file.txt
git add file.txt
git commit -m "第一次提交"
echo "world" >> file.txt
git add file.txt
git commit -m "第二次提交"

git reset --soft HEAD~1

执行效果

  • git log 撤销最近一次 commit("第二次提交" 消失)
  • 但 git status 仍然显示 file.txt 处于已暂存状态
  • 可以直接 git commit -m "修正提交" 重新提交

适用场景

✅ 提交错误时,希望修改 commit (但不想重新 add)

✅ 想合并多个 commit(如 git commit --amend)


2. git reset HEAD~1(等价于 git reset --mixed HEAD~1)

作用

  • 回退 commit
  • 取消 git add,但保留代码改动
  • 适合误提交文件,但不想丢失代码的情况

示例

bash 复制代码
echo "hello" > file.txt
git add file.txt
git commit -m "第一次提交"
echo "world" >> file.txt
git add file.txt
git commit -m "第二次提交"

git reset HEAD~1

执行效果

  • git log 撤销最近一次 commit("第二次提交" 消失)
  • git status 显示 file.txt 变为未暂存 (未 add)
  • 代码内容仍然存在 ,可重新 git add 并提交

适用场景

✅ 误提交 commit,想撤销但保留文件

✅ 误 git add,想撤销 add 但不影响文件内容


3. git reset --hard HEAD~1

作用

  • 回退 commit
  • 取消 git add
  • 丢弃所有未提交的代码修改
  • 适合彻底回退到某个提交版本

示例

bash 复制代码
echo "hello" > file.txt
git add file.txt
git commit -m "第一次提交"
echo "world" >> file.txt
git add file.txt
git commit -m "第二次提交"

git reset --hard HEAD~1

执行效果

  • git log 撤销最近一次 commit("第二次提交" 消失)
  • git status 为空,file.txt 也恢复到上一个 commit 的状态
  • 代码改动彻底丢失,无法找回 (除非 git reflog)

适用场景

✅ 彻底回滚代码,不保留更改

✅ 想回到某个历史版本,丢弃之后的所有代码

⚠️ 警告 :git reset --hard 不可逆,谨慎使用!


4. git reset 三种模式对比

模式 撤销 Commit 记录 撤销 git add 撤销文件修改 适用场景
git reset --soft HEAD~1 ✅ ❌ ❌ 提交信息错误,但代码不变
git reset HEAD~1 ✅ ✅ ❌ 误提交 commit 或 add,但代码不变
git reset --hard HEAD~1 ✅ ✅ ✅ 彻底回滚代码,不可恢复

1. git reset --hard abc123 详解

bash 复制代码
git reset --hard abc123

作用 :
git reset --hard abc123 的作用是 彻底回退到 abc123 这个提交,并丢弃后续的所有更改。

  • 重置暂存区
  • 重置工作区
  • 重置abc123之后的所有提交

2. 举个例子

假设 git log --oneline 现在是:

bash 复制代码
f4e3d2b (HEAD -> master) 第四次提交
c3b2a1d 第三次提交
b2a1c3e 第二次提交
a1b2c3d 第一次提交

如果执行:

bash 复制代码
git reset --hard b2a1c3e

那么 git log --oneline 变成:

bash 复制代码
b2a1c3e (HEAD -> master) 第二次提交
a1b2c3d 第一次提交

第三次 和 第四次 提交都消失了 (但可以用 git reflog 找回)。


3. git reset --hard 的风险

  • 如果已经 git push 过 ,你这样回退后,本地历史和远程仓库就不一致了。
  • 其他人在拉取(pull)时可能会遇到冲突,甚至代码丢失。
  • 一旦 reset --hard,后续提交就不会在 git log 里 ,如果不懂 git reflog,可能很难恢复。

4. 如果误操作了怎么办?

可以使用:

bash 复制代码
git reflog

它会显示所有 HEAD 变更的历史,比如:

bash 复制代码
f4e3d2b HEAD@{0}: reset: moving to b2a1c3e
c3b2a1d HEAD@{1}: commit: 第四次提交
b2a1c3e HEAD@{2}: commit: 第三次提交

你可以用 reflog 找回 HEAD 之前的提交:

bash 复制代码
git reset --hard f4e3d2b

这样就恢复到了 f4e3d2b(原来的最新提交)。


5. git reset --hard 的推荐使用场景

✅ 本地代码写错了,想回到某个版本 (但未 push)。

✅ 需要清理暂存区和工作区 (相当于 git clean -df + git checkout .)。

✅ 调试时想快速回滚到某个版本。

⚠️ 不要在多人协作时随便用 reset --hard,否则可能造成代码丢失!

🚀 如果已经 push 了,建议使用 git revert 代替 reset。


总结

命令 作用 是否影响 commit 记录
git reset --soft abc123 回退到 abc123,但保留修改 ✅ 记录保留
git reset --mixed abc123 回退到 abc123,工作区保留但取消暂存 ✅ 记录保留
git reset --hard abc123 彻底回退到 abc123,丢弃所有更改 ❌ 记录被删除(可用 reflog 找回)

🔥 一般推荐 reset --soft 或 reset --mixed,reset --hard 要谨慎使用!


https://github.com/0voice

相关推荐
阿部多瑞 ABU10 小时前
复杂社会关系、三层结构与自反性
大数据·人工智能·ai写作
鲲穹AI种草11 小时前
小红书 AI 创作工具怎么选?鲲穹 RedNote 功能实测与横向对比
大数据·人工智能
ROSF686812 小时前
2026 仿石漆乳液供应商:市场布局与行业发展态势梳理
大数据·人工智能·python
库拉镜像AI牛牛13 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
盟接之桥13 小时前
AI助手:你的7×24小时智能管家——让异常预警无处不在
大数据·网络·数据库·人工智能·制造·ai编程
waoooqwe13 小时前
问卷样本真实吗
大数据·数据库·算法·数据分析
砚底藏山河13 小时前
量化实战:回测数据底座快照与版本管理进阶
java·大数据·python·金融·maven
2601_9567436814 小时前
上海GEO优化公司名单(2026年10月更新):GEO是什么业务、上海主流服务商盘点与选型避坑指南
大数据·人工智能·技术分享·geo·上海
2601_9629666415 小时前
统计学专业应聘企业经营管理管培生,2027届校招的准备重点
大数据·数据分析
协皓家具15 小时前
2026年广州岛台吧台椅厂家有啥新变化
大数据·运维·python·devops