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

news/2025/3/4 1:01:35/

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

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

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

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

示例 1:修改 commit 信息

git commit --amend -m "修正提交信息"

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

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

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

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

⚠️ 注意

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

git_reset_27">2. 回撤 (git reset)

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

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

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

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

⚠️ 注意

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

git_revert_51">3. 回滚 (git revert)

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

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

示例 2:遇到冲突时,放弃回滚
git revert --abort

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

示例 3:解决冲突后继续回滚
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
git tag -a v1.0.1 -m "原神启动"

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

示例 2:推送 Tag 到远程
git push origin v1.0.1

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

  • git tag 只是指向 commit,与分支无关,如果 远端仓库多个分支,dev 和 master 都包含这个提交,它们都会显示 tag。
示例 3:删除远程 Tag
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解决冲突后继续回滚适用于手动解决冲突后继续回滚
查看 Taggit tag显示所有 Tag仅本地
创建 Taggit tag -a v1.0.1 -m "message"创建带注释的 Tag需要推送才会到远程
推送 Taggit push origin v1.0.1推送 v1.0.1 到远程远程仓库可见
删除远程 Taggit 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 + 文件修改,所有改动都被丢弃。

git_reset_soft_HEAD1_140">1. git reset --soft HEAD~1

作用

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

示例

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


git_reset_HEAD1_git_reset_mixed_HEAD1_168">2. git reset HEAD~1(等价于 git reset --mixed HEAD~1

作用

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

示例

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 但不影响文件内容


git_reset_hard_HEAD1_196">3. git reset --hard HEAD~1

作用

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

示例

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 不可逆,谨慎使用!


git_reset__227">4. git reset 三种模式对比

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

git_reset_hard_abc123__235">1. git reset --hard abc123 详解

git reset --hard abc123

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

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

2. 举个例子

假设 git log --oneline 现在是:

f4e3d2b (HEAD -> master) 第四次提交
c3b2a1d 第三次提交
b2a1c3e 第二次提交
a1b2c3d 第一次提交

如果执行:

git reset --hard b2a1c3e

那么 git log --oneline 变成:

b2a1c3e (HEAD -> master) 第二次提交
a1b2c3d 第一次提交

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


git_reset_hard__269">3. git reset --hard 的风险

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

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

可以使用:

git reflog

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

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

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

git reset --hard f4e3d2b

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


git_reset_hard__295">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


http://www.ppmy.cn/news/1576418.html

相关文章

蓝桥杯刷题(Cows in a Skyscraper G,炮兵阵营)

[USACO12MAR]Cows in a Skyscraper G 题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better known fact is that cows really dont like going down stairs. So after the cows finish racing to the top of their favor…

Python 鼠标轨迹 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

Spring Boot问题总结

1.程序包org.springframework.web.bind.annotation不存在 错误描述 执行install命令时报如下错误: [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler…

中间件专栏之Redis篇——Redis的三大持久化方式及其优劣势对比

Redis是内存数据库,它的数据一般存放在内存中,一旦断电或者宕机,存在内存中的数据就会丢失。当然,它也具备数据持久化的能力,本文就将介绍Redis的三种持久化方式及其优劣势对比。 一、RDB(Redis Database&…

使用 C# 以api的形式调用 DeepSeek

一:创建 API 密钥 首先,您需要来自 DeepSeek 的 API 密钥。访问 DeepSeek,创建一个帐户,并生成一个新的 API 密钥。 二:安装所需的 NuGet 包 使用 NuGet 包管理器安装包,或在包管理器控制台中运行以下命…

每日一题——接雨水

接雨水问题详解 问题描述 给定一个非负整数数组 height,表示每个宽度为 1 的柱子的高度图。计算按此排列的柱子,下雨之后能接多少雨水。 示例 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释&#…

【Linux】ubuntu server扩容硬盘

ubuntu server扩容硬盘 执行:lsblk lsblk # 看看硬盘设备输出如下: (base) difydify:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 73.9M 1 loop /snap/core22/1748 loop1 7:1 0 69.6M 1 loop /snap/go/10853 loop2 7:2 0 44.4M 1…

【音视频】图像基础概念

一、图像基础概念 1.1 像素 像素是一个图片的基本单位,pix使英语单词pixtureelement的结合“pixel”的简称,所以像素有图像元素之意。 例如2500*2000的照片就是指横向有2500个像素点,竖向有2000个像素点,总共500万个像素&#x…