git之代码提交错误解决

2025-07-21
1522 字约 6 分钟
...

我 add 错误文件了,怎么办?

这个就比较简单了,执行

git reset

该命令的作用是:

  • 撤销暂存:所有已经 git add 的文件会变成未暂存状态。

  • 保留工作区的修改:文件内容保持不变,仍然在工作区。你可以继续提交文件或者做一些修改之后再提交文件。

我不但 add 了还 commit 了,怎么办?

只能说你还没推送,还行!!! 其实也不难,执行一下

git reset --mixed HEAD~1

其中的HEAD~1是将 HEAD(当前分支的最新提交)回退到 前一个提交(HEAD~1 表示“当前提交的前一个”)。

如果你做了两次commit操作(还没有push),HEAD~2即可以回退这两次提交。

该命令的作用是

  • 保留工作区内容:文件内容不会丢失,工作区的文件仍然保留,而且它们变成了未暂存的状态。

  • 撤销暂存区的内容:当前提交中所有已暂存的内容会被从暂存区移除,但仍然保留在工作区。

对比一下这两个命令

命令作用提交历史变化文件变化(工作区和暂存区)
git reset --mixed HEAD什么都不做,撤回暂存区的更改(撤回add)不变暂存区的文件被撤回到工作区,变成未暂存状态
git reset --mixed HEAD~1回退到前一个提交,撤销最近的提交(撤回commit)提交历史回退暂存区和工作区的文件被保留,变成未暂存状态

我不但 add 了,还 commit 了,还push了,怎么办?

好好好,只能说干的漂亮。来瞅瞅怎么办吧!

第一种方案:撤销最近的提交(并强制推送)

如果你想撤销 最近的提交,并且不保留该提交的修改(也就是说你代码没了,铁子),你可以使用

git reset --mixed HEAD~1
git reset --soft HEAD~1
git reset --hard HEAD~1

参数介绍:

  • --mixed:将提交的文件恢复到工作区
  • --soft:将提交的文件恢复到暂存区,个人感觉不如mixed
  • --hard:丢弃该次提交的文件的改动,你代码没了(远端还在)

然后强制推送到远程仓库。

操作步骤:

  1. 回退到之前的提交:

    根据情况选择要使用的参数
    git reset --hard HEAD~1
    
    • 这会将你的 HEAD 回退到前一个提交,撤销最近的提交并丢弃(丢弃!丢弃!)修改。
  2. 强制推送到远程仓库:

    git push origin <branch-name> --force
    
    • 使用 --force 强制推送到远程仓库,覆盖远程仓库中的历史提交。
    • 同样也可以使用 HEAD~2回退到前两次提交
    • 如果推送失败,可以看git管理员是否设置禁止强推,因为确实很危险,请看下面注意事项。

注意:

  • 丢失本地修改:--hard 会丢弃工作区和暂存区的修改,因此所有未提交的改动都会丢失。如果你想保留本地修改,可以使用 git reset --mixed 或 git reset --soft。
  • 强制推送:--force 会重写远程仓库历史,如果有其他人拉取过该提交,强制推送可能导致冲突或丢失其他人的工作,因此确保与团队成员沟通。也就是说如果团队其他成员已经拉取了你的提交,那么该成员的本地分支依然有你撤销的那次提交,此时该成员要是同步代码。就会将你已经撤销的提交再次推送到远端。所以需要团队成员执行如下命令(如果其他成员没有在该分支操作,也可以删除本地分支,重新拉取远端分支)
git reset --hard origin/your-branch

第二种方案:生成一个新的提交,来撤销某一次提交

git revert 是用来撤销指定提交的命令,和 git reset 不同,git revert 不会修改历史,而是会生成一个新的提交,用于撤销指定提交的更改。因为它不会改变历史记录,而是通过创建一个新的提交来撤销之前的更改。

git revert --no-edit <commit-id>
  • <commit-id> :要撤销的提交的哈希值(commit hash)。

  • 可以通过 git log 获取提交的 commit-id。

  • --no-edit:跳过编辑提交信息的步骤(commit),自动使用默认的撤销提交信息(一般使用这个)。

  • -n 或 --no-commit:执行撤销操作,但不会自动提交。你可以在撤销操作之后,修改文件或暂存区,然后手动提交。

  • --continue:如果在执行 git revert 时发生冲突,可以手动解决冲突后,使用 git revert --continue 来继续撤销操作。

  • --edit:在创建撤销提交时,允许你编辑提交信息。默认情况下, Git 会生成一个类似于 Revert "commit message" 的提交信息,并打开你设置的默认文本编辑器(如 Vim、Nano、VSCode 等)来修改这个提交信息。

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
git2025-07-04
Git 移除已追踪文件/文件夹
<span style="color: var( g textcolor);" 详解如何优雅地从 Git 仓库中移除已被追踪的文件,并介绍相关的最佳实践和注意事项。</span 问题背景 在项目开发中,经常会遇到一些不应该被 Git 追踪的文件被意外提交的情况,比如: IDE 配置文件(.vscode、.idea 等) 编译生成的文件夹(node modules、dist 等) 本地配置文件 日志文件 解决步骤 1\. 创建或更新 .g...
学习
git2024-09-23
Git stash命令详解和使用
&nbsp; stash 命令使用非常简单,是经常使用的命令 应用场景: 1 、临时存储已修改的代码:比如正在分支A上开发某个功能,还未完成,突然要切换到B分支上去修复一个bug。这时就可以用git sta 将本地修改的内容保存至堆栈区,再切换到B分支修改bug,修复完成后,再切回到A分支,从堆栈中恢复刚刚保存的内容。 2 、同步代码:由于不小心,本来要在A分支上开发的功能代码,却写在了B分支上,这时就可以用git stash将本地代码...
学习
git2024-09-19
Git 代码提交规范,feat、fix、chore 都是什么意思
Git 代码提交规范,feat、fix、chore 都是什么意思? 经常看到别人提交的代码记录里面包含一些feat、fix、chore等等,而我在提交时也不会区分什么,直接写下提交信息,今天就来看一下怎么个事,就拿 element plus/ant design 来看一下。 其实这么写是一种代码提交规范,当然不是为了炫技,主要目的是为了提高提交记录的可读性和自动化处理能力。 当然如果团队没有要求,不这么写也可以。 commit mess...
学习
git2024-02-23
Git Worktree 的使用
官方介绍地址: 对于 git worktree 的使用场景,我们举个例子说明。 如果我们正在进行重构代码,老板突然要求我们立即修复某些问题。通常我们可能会使用 git stash 来临时存储相关更改,但是此时工作树会处于这样一种混乱状态(有新增的、被移动的、被删除的文件,以及其他的修改)。一个不注意,我们就会打乱 git stash 中的文件,此时我们原本的修改或者 Git 管理有可能就会出现问题。 如果我们希望在不影响现有更改的前提下...
学习
http-网络2026-10-15
OAuth 2.0是什么,以及如何正确接入
一、先从一个需求理解 OAuth 2.0 假设你开发了一个相册整理工具,用户希望它读取某个云盘里的照片。 把云盘密码交给工具,会带来几个问题:工具拿到的权限太大,密码可能泄漏,用户也难以只撤销这个工具的访问。 OAuth 2.0 提供一套 委托授权机制 :用户在云盘自己的页面确认授权,工具取得一个有权限范围和有效期的访问令牌,再用它调用云盘 API。用户的云盘密码不交给工具。 可以把它理解为:给工具一张“限定用途的通行证”。但令牌泄漏同...
学习
前端2026-10-15
前端动画全景指南
一、前端动画到底是什么 前端动画,就是让画面随时间、用户输入或页面状态连续变化。变化的对象可以是按钮的位置、弹窗的透明度、SVG 的线条、Canvas 里的粒子,也可以是三维场景中的镜头。 先把三个问题分开: | 问题 | 常见答案 | | | | | 画什么? | DOM/CSS、SVG、Canvas 2D、GPU 渲染的场景、预制动画素材 | | 怎样变化? | CSS 过渡/关键帧、Web Animations API、逐帧计算、...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录