工作十年只会git commit,push?三招教你提升工作效率!
wptr33 2025-05-14 17:09 33 浏览
一、最简单的比喻:Git是「撤回按钮」
工欲善其事必先利其器,提升git使用技巧是每个程序员的基本功!
把Git想象成微信的撤回功能——
- git reset = 撤回消息(假装没发过)
- git revert = 发新消息解释错误(公开承认手滑)
- git reflog = 找回已撤回的消息(防手残)
二、小白专用命令表(直接抄作业)
场景 | 命令 | 效果 |
刚提交了错误代码 | git reset HEAD~1 | 回退到提交前,代码还在你电脑里 |
错误代码已推送远程 | git revert HEAD | 生成反向提交覆盖错误,保留修改记录 |
删了代码想哭 | git reflog → 找编号 → git reset --hard 编号 | 时空倒流救回数据 |
三、真实场景手把手教学
场景1:提交了银行卡密码(误提交敏感信息)
# 第1步:撤回最近一次提交
git reset HEAD~1
# 第2步:删掉密码文件
rm password.txt
# 第3步:重新提交
git add .
git commit -m "删除了敏感信息"场景2:手滑删了老板要的代码
# 第1步:查操作记录(显示所有操作历史)
git reflog
# 输出:a1b2c3d HEAD@{2}: commit: 删了旧功能
# e4f5g6h HEAD@{3}: commit: 重要功能更新
# 第2步:穿越回删除前的版本
git reset --hard e4f5g6h场景3:代码改乱了想重来
# 一键还原到最后一次提交状态(危险!但有效)
git checkout -- .四、防坑指南(血泪经验)
- 慎用git reset --hard:相当于把工作区文件丢进碎纸机
正确姿势:先用git stash暂存修改 - 推送远程前随便玩:本地随便reset,只要不push没人知道
推送后别用reset:否则会引发「提交历史冲突」的宇宙战争 - 团队协作用revert:在错误提交上打补丁,不修改历史记录
- git revert 错误提交的编号
五、3个冷知识彩蛋
- HEAD^ = 上一次提交,HEAD~3 = 回退3个版本(数字可改)
- 用git commit --amend可以修改最后一次提交(适合补漏文件)
- VSCode自带图形化撤销按钮(右键提交记录就能rev
六、本地回退 vs 远程回退(核心差异)
- 本地回退:就像偷偷擦掉自己的草稿纸
- 远程回退:相当于抢走全班同学已经传阅的试卷
七、安全推送到远程的两种姿势
方法1:reset后强制推送(高风险!)
适用场景:个人分支且确定没有其他人使用
# 本地回退
git reset HEAD~1
# 强制推送(慎用!)
git push origin 你的分支名 --force
# 或者更安全的写法
git push origin 你的分支名 --force-with-lease血泪教训:某程序员强制推送后,导致同事三天的工作成果灰飞烟灭(现已被发配维护祖传代码)
方法2:revert后普通推送(推荐姿势)
适用场景:团队协作分支
# 创建反向提交
git revert HEAD
# 正常推送
git push origin 你的分支名八、实战场景:已推送的错误提交如何补救
错误场景:
- 提交了错误代码并推送到远程
- 其他同事已经拉取了最新代码
正确操作流程:
# 1. 创建抵消提交
git revert 错误提交的SHA值
# 2. 查看生成的抵消提交
git log -2
# 3. 推送修正
git push origin 分支名效果展示:
原始提交:A -> B -> C(错误提交)
执行revert后:A -> B -> C -> C'(抵消提交)九、强制推送的正确打开方式
安全操作四步法:
# 1. 提前告知团队
在群里大喊:"我要回退远程提交了!大家先别拉代码!"
# 2. 创建备份分支(保命符)
git branch backup_before_reset
# 3. 本地回退
git reset --hard HEAD~3
# 4. 安全强制推送
git push origin 分支名 --force-with-lease为什么用--force-with-lease?
- 普通--force:相当于把服务器门砸开硬塞
- --force-with-lease:先检查门锁是否被改动过,避免覆盖他人提交
十、多人协作中的后悔药说明书
场景 | 正确操作 | 错误操作示例 |
个人分支需要回退 | reset + force-with-lease | 直接push -f |
公共分支需要回退 | revert + 普通push | 在公共分支用reset |
不确定是否有人拉取 | 创建新分支修正后发起PR/MR | 直接修改原分支 |
十一、防翻车验证流程(必看!)
- 强制推送前先拉取最新代码:
git fetch origin
git diff origin/分支名- 用-n参数试运行(dry-run):
git push origin 分支名 --force-with-lease -n- 使用Git图形化工具查看变化(推荐VSCode或GitKraken)
十二、后悔药的后遗症处理
如果已经误操作导致远程混乱:
# 1. 找回本地备份分支
git checkout backup_before_reset
# 2. 重新强制推送正确版本
git push origin 分支名 --force-with-lease
# 3. 在群里发红包道歉十三、冷知识:Git推送的量子纠缠
当你在本地执行reset --hard时,实际上创造了一个平行宇宙。而push --force相当于用你的宇宙覆盖服务器上的宇宙——这就是为什么强制推送会引发「祖父悖论」的原因。
十四、终极生存测试
- 在GitHub创建测试仓库
- 故意推送错误提交
- 尝试用两种方法回退:
- 方法A:reset + 强制推送
- 方法B:revert + 普通推送
- 观察两种方法的历史记录差异
(完成后你会获得「Git外科医生」的隐藏成就)
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个else解...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。今天分享一下break和continue在代码中的执行效果是什么,进一步区分出二者的区别。一、continue例1:当小明3岁时不打印年龄,其余年龄正常循环打印。可以看...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录由浅入深,66条JavaScript面试知识点(一)由浅入深,66...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)1.vue的生命周期有哪些及每个生命周期做了什么?beforeCreate是newVue()之后触发的第一个钩子,在当前阶段data、methods、com...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
