【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 --softreset --mixedreset --hard 要谨慎使用!


https://github.com/0voice

相关推荐
python资深爱好者11 分钟前
什么容错性以及Spark Streaming如何保证容错性
大数据·分布式·spark
心无旁骛~1 小时前
Git笔记汇总,持续更新~
笔记·git
B站计算机毕业设计超人1 小时前
计算机毕业设计hadoop+spark旅游景点推荐 旅游推荐系统 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计
大数据·hadoop·爬虫·深度学习·机器学习·数据可视化·推荐算法
qiquandongkh2 小时前
2025年股指期货和股指期权合约交割的通知!
大数据·金融·区块链
Ray.19983 小时前
优化 Flink 消费 Kafka 数据的速度:实战指南
大数据·flink·kafka
D愿你归来仍是少年3 小时前
Python解析 Flink Job 依赖的checkpoint 路径
大数据·python·flink
飞火流星020273 小时前
ElasticSearch公共方法封装
elasticsearch·搜索引擎·es鉴权·es代理访问·es公共方法封装·es集群访问·判断es索引是否存在
说私域4 小时前
利用开源AI智能名片2+1链动模式S2B2C商城小程序构建企业私域流量池的策略与实践
大数据·人工智能·小程序·开源
vvvae12344 小时前
Elasticsearch实战应用:从“搜索小白”到“数据侦探”的进阶之路
elasticsearch
yinbp4 小时前
bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全
大数据·elasticsearch·微服务·etl·restclient·bboss