【git reset】个人分支一次精准撤回 git push 的实战记录

代码Push后发现有严重Bug?手把手教你Git回滚与撤回 📝 Git回滚操作全指南 核心问题:已push的代码如何安全回滚? 🔧 三大回滚方案 git revert(团队协作首选) 创建反向提交抵消错误,保留历史记录 操作:git revert <commit_id> → 普通push git reset(仅限个人分支) 彻底删除错误提交,需强制推送 操作:git reset --hard <commit_id> → push -f git commit --amend 修改最后一次提交,适合小修正 🎯 精准回滚单个文件 git ch 阅读详情

有些 Git 操作,看起来像“事故现场清理”,但真正理解之后,你会发现它其实非常理性。

​ 这篇文章,记录的是我一次很普通、但非常真实的开发经历。但是需要注意哦,我这里用reset是对我个人分支操作,如果是合作分支请优先考虑revert!!
在这里插入图片描述

一、事情是怎么发生的

​ 事情发生在一个再普通不过的开发时刻。

​ 我在一个功能分支kylin/3.3.1上开发新版本功能,为了排查参数问题,我临时加了一些调试日志。

​ 开发过程中一切顺利,测试也跑通了。

​ 于是,我很自然地:

git add .
git commit -m "debug: add logs"
git push

​ 推完之后,终端一片安静,一切看起来都“完成了”。

​ 但就在那一刻,我突然意识到一件事:这批日志,只是为了本地调试,它不应该进入远程仓库,更不应该成为长期历史的一部分。

二、我第一反应的犹豫

​ 如果你用 Git 有一段时间了,大概会和我一样,下意识想到:

  • 要不要 git revert?

  • 要不要再提一个「删除日志」的 commit?

    但很快我就否定了这些方案。

    为什么?因为这会在历史里留下类似这样的痕迹:

debug: add logs
revert "debug: add logs"
  • 对于一个纯调试提交来说,这样的历史是多余的、甚至是噪音。

    我真正想要的是:“这次 debug 提交,能不能就当它从来没发生过?”

三、先冷静,看清楚自己处在什么位置

​ 在真正动手之前,我先做了一件很重要、但经常被忽略的事情:

git log --oneline -3

​ 结果是:

5d0fa134 (HEAD -> kylin/3.3.1, origin/kylin/3.3.1) debug: add logs
b16d441e feat: optimize the param
cbd6c153 feat: frozen feature

​ 这段信息非常关键,它告诉我三件事:

  • debug: add logs 是最新一次提交

  • 当前分支是一个 feature 分支,不是主分支

  • 这个分支目前只有我在使用

    这意味着:我并不是在修改“公共历史”,而是在整理自己的工作区。

四、真正的解决方式,其实很简单

​ 确认完边界之后,操作反而变得非常直接。

4.1 回退本地分支

git reset --hard HEAD~1

​ 这一条命令的语义非常明确:把分支指针移回上一个提交,最新那次提交不再属于当前分支。

​ 此时,本地的 Git 历史已经是我真正想要的样子了。

4.2 让远程分支“对齐”现实

​ 但问题还没完全结束。

​ 远程分支上,debug: add logs 依然存在。

​ 这时就需要一次受控的强制推送:

git push --force-with-lease

​ 我刻意选择了 --force-with-lease,而不是 --force:

  • 如果远程分支被别人更新过,它会拒绝推送
  • 可以避免无意中覆盖他人的工作

五、结果:一次“无声”的修复

​ 操作完成后,我再次查看提交历史:

git log --oneline -3

​ 结果是:

b16d441e feat: optimize the param
cbd6c153 feat: frozen feature

​ 那次调试提交,干净、完整、没有任何痕迹地消失了。

​ 没有 revert,没有额外提交,也没有历史噪音。

六、这次经历带给我的一个判断标准

​ 这次经历之后,我对 Git 的很多操作有了一个更清晰的判断标准:问题不在于你有没有“重写历史”,而在于你有没有在重写“别人的历史”。

  • 个人 / feature 分支:
    • 历史是可以被整理的
    • reset + force-with-lease 是合理工具
  • 公共分支(main / develop):
    • 历史是一种契约
    • revert 才是负责任的选择

七、写在最后

​ 很多人害怕 Git 的“危险命令”,其实并不是因为命令本身危险,而是不清楚自己所处的协作边界。

  • 一旦边界清楚了:

    • 什么时候可以改历史
    • 什么时候只能追加历史

    Git 反而会变成一个非常理性的工具。

  • 这次看似“事故处理”的经历,本质上只是一次对自己开发过程的整理。而这,恰恰是我认为 Git 最值得被认真理解的地方。

Git分支重置与远程提交删除:从reset到force push的完整实践指南 在版本控制与团队协作中,Git分支管理是开发者绕不开的核心技能。当误提交、错误合并或敏感信息推送发生后,如何安全地重置本地分支并同步覆盖远程提交,成为保障代码库整洁与数据安全的关键。理解git reset的三种模式(soft/mixed/hard)以及工作区、暂存区、提交历史的关系,是掌握历史重写的基础;而使用--force-with-lease而非--force,则能在强制推送时避免覆盖他人的协作成果。面对多人共享分支,revert与reset的取舍、reflog的误操作救援机制、远程分支删除后的本地清理 阅读详情

相关推荐

Git reset 与 revert 的本质区别:本地重写 vs 公共冲销

Git 中的版本控制不仅是文件快照管理,更是协作环境下的历史账本机制。reset 通过移动 HEAD 指针重写本地提交历史,适用于未推送的修正场景;revert 则生成反向新 commit,保持历史线性与可审计性,是共享分支上安全回滚的唯一推荐方式。二者差异源于 Git 的分布式设计哲学:本地操作可塑,公共历史不可篡改。在数据工程、MLOps 和 CI/CD 流水线中,错误选用 reset 覆盖远程分支极易引发‘删库跑路’级事故,而 revert 结合 --no-commit 模式可实现可控预演。掌握 re

weixin_30896511的博客 425

Git进阶命令-reset

注意:对于已经 push 的 commit,也可以使用reset命令,不过再次 push 时,由于远程分支和本地分支有差异,需要强制推送 git push -f 来覆盖被 reset 的 commit。这个命令和前面差别就非常大了,它不仅会丢弃错误commit提交的代码,而且本地没有commit的修改会被全部擦掉,关键是这种情况本地代码一旦擦掉是没有任何办法在找回来了。工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了。:此为默认方式,将撤回的代码,存放到工作区。

dsgdauigfs的博客 6366

Git强制同步本地分支到远程:fetch + reset --hard 安全实践

Git 中的‘强制拉取’并非官方命令,而是指通过精准控制版本引用实现本地分支与远程状态的一致性同步。其核心原理在于 Git 的三区模型(HEAD、Index、Working Directory)与远程跟踪分支(如 origin/main)的引用机制。技术价值体现在规避合并冲突、保障 CI/CD 环境纯净、支持可重复的自动化部署;典型应用场景包括修复因本地误提交导致的构建失败、跨团队协作中快速对齐基准代码、以及清理调试残留后回归可信历史。本文围绕 git fetch 和 git reset --hard 两大

weixin_30435261的博客 333

[work] Git reset命令的使用

Git reset 命令有三个主要选项:git reset --soft; git reset --mixed; git reset --hard; git reset --soft 将HEAD引用指向给定提交。索引和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。 git reset --mixed(git reset默认的模式) HEAD引用指向给定提交,并且索引内容也跟...

This is bill的专属博客 672

Git强制同步远程分支的正确姿势:fetch+reset--hard详解

在版本控制中,'让本地分支完全匹配远程最新状态'是一个基础而高频的技术需求,常被误认为可通过git pull --force实现。实际上,该命令并不存在真正覆盖语义,其本质是fetch加merge,无法丢弃本地修改。真正安全、可控的强制同步依赖于Git三大核心对象模型——引用、对象数据库与工作目录的协同运作。通过git fetch获取远程快照(只读不写),再以git reset --hard精准重置三者状态,可实现原子级对齐。这一方案广泛应用于协作冲突修复、CI/CD环境重置及历史重写后恢复等工程场景,是每

weixin_30878501的博客 356

Git五大核心命令本质区别:rebase/merge/stash/revert/reset场景决策指南

Git 是基于有向无环图(DAG)的对象数据库系统,其核心操作本质是对 HEAD、Index 和 Object Database 三大结构的指针移动或对象创建。理解 commit 对象的不可变性、分支的引用语义及历史重写的安全边界,是掌握版本控制的关键基础。rebase 通过复制提交实现历史线性化,适用于本地未推送的提交整理;merge 则创建新节点记录协作事实,保障多人开发可追溯性;stash 作为临时快照机制,不生成 commit 对象,仅在本地暂存工作区与暂存区状态;revert 以‘加法’方式安全撤

weixin_30236595的博客 488

Git回滚版本并push到远端master

Git回滚版本并push到远端master

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 3365

Git reset HEAD 原理与三模式深度解析:软/混/硬重置机制详解

Git reset 是 Git 引用模型的核心操作,本质是调整分支指针、暂存区(Index)和工作目录的三层状态。其 `--soft`、`--mixed`(默认)、`--hard` 三种模式分别对应修改引用层、引用+索引层、引用+索引+工作目录层,直接影响代码是否丢失。理解 `HEAD` 并非时间点而是可移动的符号引用(指向分支或 commit),是避免误操作的关键。该命令广泛应用于撤销暂存、修正提交信息、CI 故障回滚、合并中止及调试分支清理等工程场景。本文聚焦 `git reset HEAD` 及其变体

358

git reset后提交_当您需要撤消之前的本地提交时,只需执行git reset和push

我最近发表了一篇有关如何执行硬git reset的文章,但是在社交媒体上我反复问到的问题之一是,您对本地提交进行硬git reset之后将更改发布到远程GitHub或GitLab存储库? 当您执行git reset and push时,是否会发布整个提交历史记录,包括在重置点之后发生的提交,还是忽略了Git回滚的提交? 如何git重设并推动 在本地工作时,不清楚将git reset重...

服务器编程交流平台 9469

UnityWebGL异常捕获全攻略:从报错提示到完美解决的3种配置方案

本文详细解析了UnityWebGL项目中异常捕获的三种核心配置方案:禁用异常、仅捕获显式异常以及完全捕获异常(无堆栈跟踪)。通过对比不同方案在构建体积、运行性能及错误信息详细度上的差异,帮助开发者根据开发、测试与发布阶段的不同需求,选择并配置最优的异常处理策略,从而有效提升WebGL应用的调试效率和线上稳定性。

5f4d3s2a1q的博客 398

squidpy 教程 2:利用 Scanpy 和 Squidpy 进行空间数据的可视化分析

本教程详细介绍了如何利用Squidpy和Scanpy对空间转录组数据进行可视化分析。通过将Scanpy处理得到的聚类结果映射回原始组织图像,并结合基因表达与空间邻域信息,帮助研究者直观揭示细胞类型分布、基因表达模式及空间相互作用,从而深入挖掘空间组学数据的生物学意义。

weixin_29081703的博客 446

git reset push

回滚到指定的版本 git reset --hard e377f60e28c8b84158 强制提交 git push -f origin master

zhen8023wan的专栏 2717

【智能车学习】电磁循迹中的基本控制算法

今天心血来潮,突然想总结一下电磁车的一些基本算法,也希望可以给新手同学们一点帮助和参考。本篇主要讲述智能车电磁循迹中涉及到的基本算法,包括滤波算法,归一化算法,PID控制等

Carry_qing的博客 6万+

Git撤销上一次提交(撤销提交,Git回退提交)git reset、git revert、撤销commit、撤销push

Git 的设计哲学不是惩罚错误,而是赋予你修正的自由。—— 每个开发者都曾手抖过,重要的是学会安全地“后悔”

Dontla的博客 4626

<视觉>——单目相机的标定(简单原理+Opencv实现)

单目相机的标定原理大致如下: 世界坐标到像素坐标的转换。 期间的参数有S尺度因子,内参矩阵K,旋转矩阵R,平移矩阵T,一共八个未知数。 在Opencv中我们可以方便的根据相机拍摄不同位姿的标定板图片来标定相机,从而求得这些参数,从而可以将相机下的坐标和实际的世界坐标联系起来,求取单应性矩阵H 参考: 单目相机综述:写的特别好 https://www.cnblo...

Kano365的博客 1万+

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 151

Git撤销远程提交push:reset与force-with-lease实战指南

版本控制系统Git是现代软件开发的基础工具,日常提交推送难免遇到误操作。当错误提交被推送到远程仓库,如何安全高效地撤回成为开发者必备技能。理解Git的三个工作区模型与reset的三种模式(soft/mixed/hard),以及revert与reset的适用边界,是掌握撤销操作的前提。在个人分支场景下,git reset --hard配合git push --force-with-lease能够精准移除错误提交并强制同步远端,既保留干净历史又避免影响协作者。该技术广泛应用于误提交调试代码、敏感信息泄露、推送错

weixin_30129025的博客 204

Kimodo 入门教程(一)英伟达开源人形机器人动捕数据集训练运动学动作扩散模型

Kimodo是一个基于700小时商用光学动作捕捉数据集训练的运动学动作扩散模型,能够生成高质量的人体和机器人3D动作。该模型支持通过文本提示和多种约束条件(如关键帧、末端执行器位置等)进行控制,并提供数字人类和类人机器人两种模型变体。安装方式包括软件包安装和源代码安装两种,需要配置HuggingFace令牌以访问文本编码器。推荐使用GPU加速,最低需要17GB显存。项目提供命令行生成和交互式演示两种使用方式,演示程序支持时间轴编辑和实时3D可视化。模型分为商用友好版和受限版,其中SMPL-X版本需要额外申请

2506_90492529的博客 1930

Git 后悔药指南:深入对比 git revert 与 git reset --hard

Git撤销操作的核心区别:revert vs reset --hard git revert和git reset --hard是Git中两种主要的撤销操作方式,但原理和影响截然不同。revert通过创建新提交来安全撤销指定修改,保留完整历史记录,适合团队协作和已推送代码的撤销。而reset --hard直接删除历史提交,重写分支历史,仅限未推送的本地代码使用,强制推送会严重破坏团队协作。关键选择原则:已推送代码必须使用revert;纯本地未共享代码才考虑reset --hard,后者具有高风险性。团队开发中

weixin_39724194的博客 383

利用PaddleOCR识别增值税发票平台验证码(开箱即用)

下面直接讲解利用paddleocr识别的思路,为什么使用paddleocr,因为paddle中集成了较好的ocr文字识别模型,开箱即用即可,废话不多说,剑指主题,识别思路步骤如下。

码王吴彦祖的博客 5544

[Python] 为什么你的脚本明明没报错,却什么也没发生?

Python脚本运行后没报错却没结果?这是许多开发者遇到的棘手问题。文章分析了六种常见原因:代码未进入目标逻辑分支、输出路径错误、中间数据为空、异常被吞掉、异步操作未完成、运行了错误脚本版本。建议通过"过程可视化"排查,如打印关键变量、检查工作目录、验证数据状态等。职场中更应关注结果验证而非单纯代码执行,确保脚本真正解决问题。建立结果验证意识是从"会写代码"到"稳定交付"的关键转变。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 303

Git合并撤回技巧:快速回退未推送合并

Git合并撤回指南 撤回未推送的Git合并分三种场景: 已生成commit:使用git reset --hard ORIG_HEAD(推荐)或git reset --hard HEAD~1彻底回退; 冲突未解决:直接执行git merge --abort终止合并; 需保留本地修改:用git reset --merge ORIG_HEAD仅撤销合并相关文件。 注意事项: ORIG_HEAD自动记录合并前状态,优先使用; --hard会丢失未提交修改,操作前确认git status; 通过git reflog可

a731637163的博客 283

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Git 常用命令大全(日常开发+反悔撤回 极简版)

本文整理了日常开发最常用的Git命令大全,涵盖基础操作、反悔撤回、分支管理等高频场景。主要内容包括:1)基础必用命令如pull、commit、push;2)全场景撤回方案(未add、已commit未push、已push远程等);3)实用技巧如stash储藏、cherry-pick迁移;4)团队协作避坑指南,强调公共分支必须使用revert安全回滚。提供场景速查表,帮助开发者快速定位所需命令,避免代码丢失风险。

Cleverguyyy的博客 312

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

git 怎么拉去分支代码_Git使用技巧1——代码写错分支了怎么办?

工欲善其事,必先利其器。前言Git的本质git是一个版本控制工具,一切以版本控制为中心,版本即每一次commit,其实分支是指向commit的,HEAD也是指向某一次提交的,HEAD其实指向的就是当前分支的最近一次commit,可以看到master分支相对当前分支就落后了一个版本。通过上面的理解我们简单举一个例子,git merge 命令,比如当前我们在master分支,将deploy...

weixin_30679649的博客 411

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Git 回滚实战:从 reset 到 revert 再到 reflog 的精确恢复指南

在软件协作开发中,版本控制是保障代码质量与协作效率的基石,而提交历史的管理更是高频操作。当代码被错误提交到仓库时,如何安全、精准地回滚成为开发者急需掌握的技能。本文从版本状态区分入手,梳理git log定位提交历史的方法,重点对比git reset --hard与revert的核心差异,并深入介绍git reflog在误操作后的恢复价值。同时结合已推送分支的协作场景,给出团队中安全撤回提交的工程实践,涵盖force-with-lease、冲突处理等高频问题。无论你是刚接触Git的新手,还是需要处理复杂历史的

weixin_28828243的博客 323

Git如何检出远程分支并创建可编辑本地分支

在分布式版本控制系统中,远程分支本质上是远程仓库的独立引用,而本地无法直接操作它;Git 通过远程跟踪分支(如 origin/main)缓存其最新提交哈希,实现状态同步。理解本地分支、远程分支与远程跟踪分支三者的本质区别,是掌握协作开发的基础。技术价值在于保障多人并行修改的安全性与可追溯性,避免误提交或状态混乱。典型应用场景包括新成员拉取功能分支、日常对接同事开发中的 feature 分支、CI/CD 流水线触发前的代码准备等。本文聚焦‘git switch -c’与‘git checkout -b’两种标

aoe41606的博客 498
上一篇: [git技巧]一次 `git push` 被拒绝的真实经历:我该 merge 还是 rebase?
下一篇: 【git reset】我终于真正理解了 git reset
未收敛
博客等级 码龄11年 3313粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未收敛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值