主页 > 人工智能  > 

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

【git】提交修改、回撤、回滚、Tag操作讲解,与reset(--soft、--mixed、--hard)的区别
Git 提交修改、回撤、回滚、Tag 操作详解 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 强制推送,否则远程仓库的历史会不一致。
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 找回。
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查看所有本地 Taggit tag -a v1.0.1 -m "原神启动"创建一个 v1.0.1 的 Taggit 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远程仓库不再可见
🔹 总结 git commit --amend 用于修改最近一次提交,避免新建 commit。git reset 用于回撤提交,但可能会影响历史,慎用 --hard。git revert 用于回滚提交,不会影响历史,适合多人协作。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 的情况 示例 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,但保留代码改动适合误提交文件,但不想丢失代码的情况 示例 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丢弃所有未提交的代码修改适合彻底回退到某个提交版本 示例 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 详解 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 找回)。


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(原来的最新提交)。


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 要谨慎使用!


github /0voice

标签:

【git】提交修改、回撤、回滚、Tag操作讲解,与reset(--soft、--mixed、--hard)的区别由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【git】提交修改、回撤、回滚、Tag操作讲解,与reset(--soft、--mixed、--hard)的区别