git之我add错了代码怎么办呀!我commit错了怎么办呀!

虽然错过的人无法挽回,但是git提错的代码却可以撤销。

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

这个就比较简单了,执行

perl 复制代码
git reset

该命令的作用是:

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

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

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

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

css 复制代码
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了,怎么办?

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

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

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

css 复制代码
git reset --mixed HEAD~1
git reset --soft HEAD~1
git reset --hard HEAD~1

参数介绍:

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

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

操作步骤:

  1. 回退到之前的提交

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

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

注意

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

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

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

css 复制代码
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 等)来修改这个提交信息。

小小拙见,欢迎大家指正错误。

相关推荐
清岚_lxn4 小时前
原生SSE实现AI智能问答+Vue3前端打字机流效果
前端·javascript·人工智能·vue·ai问答
ZoeLandia5 小时前
Element UI 设置 el-table-column 宽度 width 为百分比无效
前端·ui·element-ui
橘子味的冰淇淋~5 小时前
解决 vite.config.ts 引入scss 预处理报错
前端·vue·scss
小小小小宇7 小时前
V8 引擎垃圾回收机制详解
前端
lauo7 小时前
智体知识库:ai-docs对分布式智体编程语言Poplang和javascript的语法的比较(知识库问答)
开发语言·前端·javascript·分布式·机器人·开源
拉不动的猪8 小时前
设计模式之------单例模式
前端·javascript·面试
一袋米扛几楼988 小时前
【React框架】什么是 Vite?如何使用vite自动生成react的目录?
前端·react.js·前端框架
Alt.98 小时前
SpringMVC基础二(RestFul、接收数据、视图跳转)
java·开发语言·前端·mvc
进取星辰8 小时前
1、从零搭建魔法工坊:React 19 新手村生存指南
前端·react.js·前端框架
互联网老辛9 小时前
【读者求助】如何跨行业进入招聘岗位?
面试·个人思考