Git 不要只会 pull 和 push,搞上 5 个提升效率的命令!

文章目录

      • Git 不要只会 pull 和 push,搞上 5 个提升效率的命令!
      • 1. `git stash` —— 暂存修改,快速切换分支
      • 2. `git cherry-pick` —— 单独拣选特定提交
      • 3. `git rebase` —— 整理提交历史,让提交记录更清晰
      • 4. `git reset` —— 恢复到指定状态,撤销错误提交
      • 5. `git reflog` —— 找回误删除的提交
      • 额外小技巧:组合使用 `rebase` 和 `cherry-pick` 修复代码冲突
      • 总结

博主介绍:全网粉丝10w+、CSDN合伙人、华为云特邀云享专家,阿里云专家博主、星级博主,51cto明日之星,热爱技术和分享、专注于Java技术领域
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Git 不要只会 pull 和 push,搞上 5 个提升效率的命令!

Git 是每个开发者的基本技能,但很多人只停留在 git pullgit push 的基础操作上,忽略了它更强大的功能。Git 其实包含了许多提升效率的命令,可以帮我们管理历史、优化提交、处理分支冲突,甚至挽救犯下的错误。今天就来介绍 5 个提升开发效率的 Git 命令,结合具体案例和代码示例,帮助你更深入掌握 Git。

在这里插入图片描述


1. git stash —— 暂存修改,快速切换分支

** 背景 **

在日常开发中,我们经常需要切换分支,例如从开发分支切到生产分支修复 bug,但此时又不想放弃未完成的修改。git stash 能将当前工作区的修改“存入”一个临时的地方,方便之后恢复,让你可以安全、快速地切换分支。

** 用法**

# 将当前修改暂存
git stash# 列出所有暂存的修改记录
git stash list# 恢复最新的暂存修改
git stash apply# 恢复并删除该暂存修改
git stash pop

** 示例**

假设你正在 feature-A 分支上开发新功能,这时突然接到任务需要切到 master 分支修复紧急 bug。此时,只需使用 git stash

# 保存当前修改并切换到 master 分支
git stash
git checkout master

修复完 bug 并提交后,可以切回 feature-A 分支,并恢复之前的工作状态:

git checkout feature-A
git stash pop

小提示:你还可以为 git stash 起名字,例如 git stash save "feature-A进度",方便后续查找。


2. git cherry-pick —— 单独拣选特定提交

** 背景**

在开发多个功能的过程中,有时只需要从一个分支拿某一个特定的提交,而不是整个分支的合并。这种场景下,git cherry-pick 可以大显身手,帮助你只“挑”需要的提交。

** 用法**

# 应用某个提交到当前分支
git cherry-pick <commit-hash>

** 示例**

假设你在 feature-A 分支完成了一个修复提交,并提交到了该分支。但产品需求变动,需要将这个修复先应用到 master 分支:

# 切换到 master 分支
git checkout master# 使用 cherry-pick 将修复提交应用到 master
git cherry-pick <修复提交的hash>

cherry-pick 操作非常适合单独拣选一个或多个提交,尤其是在代码紧急合并或回滚某些提交时使用。


3. git rebase —— 整理提交历史,让提交记录更清晰

** 背景**

在多人协作或进行复杂开发时,分支上常常会产生许多提交记录,有些记录甚至毫无意义(比如 “fix bug”)。git rebase 能帮我们优化提交历史,把相关的提交合并在一起,便于代码审查和后续维护。

** 用法**

# 交互式 rebase,对前 n 个提交进行整理
git rebase -i HEAD~<n>

** 示例**

假设你的提交记录如下:

commit A - 初始提交
commit B - 新增功能 1
commit C - 修复功能 1
commit D - 新增功能 2
commit E - 修复功能 2

你希望将功能 1 和功能 2 的提交分别合并成一次提交,便于查看和管理。可以执行:

git rebase -i HEAD~4

进入交互式编辑界面,将需要合并的提交使用 squash 标记:

pick B 新增功能 1
squash C 修复功能 1
pick D 新增功能 2
squash E 修复功能 2

这会将 BC 合并成一个提交,DE 合并成另一个提交,简化提交历史。


4. git reset —— 恢复到指定状态,撤销错误提交

** 背景**

开发过程中,难免会遇到误操作,如提交到错误分支、提交错误内容等。此时,git reset 就能帮助我们回到指定的提交状态,撤销不需要的更改。

** 用法**

# 回退到指定的提交(软回退,保留修改)
git reset --soft <commit-hash># 回退到指定提交(硬回退,放弃所有修改)
git reset --hard <commit-hash>

** 示例**

假设你误将一个提交推送到远程仓库,但不希望该提交保留,可以使用 git reset 回退:

# 回退到目标提交的前一个
git reset --hard <目标commit的hash># 强制推送
git push -f

注意git reset --hard 会删除所有未提交的更改,使用前确保备份重要内容。


5. git reflog —— 找回误删除的提交

** 背景**

使用 git resetgit checkout 时,可能会遇到误操作导致提交被删除,这时可以通过 git reflog 找回丢失的提交。git reflog 能追踪 Git 的所有操作日志,甚至包含被删除的提交。

** 用法**

# 查看所有操作记录
git reflog# 恢复误删除的提交
git checkout <commit-hash>

** 示例**

假设你误用 git reset --hard 删除了最近的一些提交,可以通过 git reflog 找回:

# 查看最近的所有操作记录
git reflog

假如你发现误删除的提交 hash 为 abcd1234,可以这样恢复:

git checkout -b lost-work abcd1234

这样便创建了一个新的分支 lost-work,包含了误删除的提交内容。


额外小技巧:组合使用 rebasecherry-pick 修复代码冲突

假设你的分支出现了复杂的冲突问题,可以借助 rebasecherry-pick 来分阶段处理。例如,先将冲突分支 feature-B 进行 rebase,然后在每次冲突的节点应用 cherry-pick 来确保代码合并的完整性。这种方法能有效减少冲突、避免代码丢失。


总结

以上就是提升 Git 操作效率的 5 个实用命令。掌握了这些命令,git pullgit push 只会成为基础,而你会从容地处理复杂提交、管理分支以及挽救误操作。对于专业的开发者来说,学会高效使用 Git 不仅能节省开发时间,还能提高代码的质量与协作效率。在未来的项目中,不妨多尝试这些高级命令,让 Git 成为你的开发好帮手。

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9674.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ONLYOFFICE 快速部署教程:让你的私有云盘也可以预览和编辑 Office 文档

ONLYOFFICE Docs (原 ONLYOFFICE Document Server) 是一款强大的开源在线办公套件&#xff0c;包含用于文本、电子表格和演示文稿的查看器和编辑器&#xff0c;完全兼容 Office Open XML 格式&#xff08;.docx、.xlsx、.pptx&#xff09;&#xff0c;并支持实时协作编辑。本文…

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介 ESP32支持5种低功耗模式&#xff0c;低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。 1.1 RTC单元 RTC单元是ESP32低功耗管理的核心&#xff0c;可用于管理低功耗模式的进入和退出&#xff0c;控制时钟源、PLL、电源开…

SQLite的BLOB数据类型与C++二进制存储学习记录

一、BLOB数据类型简介 Blob&#xff08;Binary Large Object&#xff09;是一种用于存储二进制数据的数据类型&#xff0c;在数据库中常用于存储图片、音频和视频等大型&#xff08;大数据量&#xff09;的二进制数据[1-2]。需要注意的是&#xff0c;SQLite中BLOB类型的单对象最…

如何利用低代码平台进行创业?开启你的数字化转型之旅

在当今这个飞速发展的数字化时代&#xff0c;低代码开发已经成为企业加速业务流程、提升运营效率的关键手段之一。它不仅简化了软件开发过程&#xff0c;使得非技术人员也能参与到应用程序的构建中来&#xff0c;还为企业和个人提供了更加灵活、高效的创业路径。本文将探讨如何…

从0开始深度学习(28)——序列模型

序列模型是指一类特别设计来处理序列数据的神经网络模型。序列数据指的是数据中的每个元素都有先后顺序&#xff0c;比如时间序列数据&#xff08;股票价格、天气变化等&#xff09;、自然语言文本&#xff08;句子中的单词顺序&#xff09;、语音信号等。 1 统计工具 前面介绍…

Xcode无线真机调试

文章目录 Xcode无线真机调试前提条件无线真机调试 Xcode无线真机调试 前提条件 iPhone和Xcode连接在同一WIFI下&#xff1b;或 Xcode通过iPhone的IP地址进行连接&#xff1b;Xcode版本支持无线调试功能&#xff1b; 无线真机调试 首次使用&#xff0c;需要通过数据线连接MAC…

暴雨讲堂|AI算力芯片王者GPGPU是什么?

在AI飞速发展的这几年&#xff0c;市场上涌现一大批诸如DPU、NPU、TPU、IPU等“XPU”的新概念&#xff0c;是真的存在不同的架构&#xff0c;还是只是一些厂商营销出来的噱头&#xff1f;事实上&#xff0c;从CPU的发展角度来看&#xff0c;这些XPU都不是真正的处理器。相反&am…

行车记录打不开?原因分析与数据恢复全攻略

行车记录遭遇困境 行车记录仪&#xff0c;作为现代驾驶中的重要设备&#xff0c;不仅能够帮助我们记录行车过程&#xff0c;还能在关键时刻提供有力的证据。然而&#xff0c;当行车记录突然打不开时&#xff0c;这无疑给车主们带来了不小的困扰。行车记录打不开&#xff0c;可…

SpringMVC总结 我的学习笔记

SpringMVC总结 我的学习笔记 一、SpringMVC简介1.MVC2.SpringMVC概述3. SpringMVC中的核心组件4.SpringMVC核心架构流程 二、SpringMVC框架实例具体实现使用注解实现 四、数据处理及跳转1.结果跳转方式2.处理器方法的参数与返回值处理提交数据数据显示到前端 五、RestFul风格1.…

云计算基础1

声明 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 云计算基础概念 一、云计算的定义 云计算是一种资源交付和使用模式&#xff0c;指通过网络获得应用所需的…

Guava限流神器:RateLimiter使用指南

1. 引言 可能有些小伙伴听到“限流”这个词就觉得头大&#xff0c;感觉像是一个既复杂又枯燥的话题。别急&#xff0c;小黑今天就要用轻松易懂的方式&#xff0c;带咱们一探RateLimiter的究竟。 想象一下&#xff0c;当你去超市排队结账时&#xff0c;如果收银台开得越多&#…

被复线远传节点机JR-IPAM-1600

产品描述 JR-IPAM-1600J是一款被复线远传节点机&#xff0c;通过传统双绞线电缆&#xff08;被复线\网线\对数电缆\矿用电缆等&#xff09;&#xff0c;用户就可以快速组成一个高速的传输网、局域网。它具有传输速率高、运行稳定、快速安装部署的特点&#xff0c;设备特有的AU…

【React】React 生命周期完全指南

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 React 生命周期完全指南一、生命周期概述二、生命周期的三个阶段2.1 挂载阶段&a…

自定义springCloudLoadbalancer简述

概述 目前后端用的基本都是springCloud体系&#xff1b; 平时在dev环境开发时&#xff0c;会把自己的本地服务也注册上去&#xff0c;但是这样的话&#xff0c;在客户端调用时请求可能会打到自己本地&#xff0c;对客户端测试不太友好. 思路大致就是前端在请求头传入指定ip&a…

Vue3-子传父

1. 主组件 App.vue&#xff08;父组件&#xff09; 在 App.vue 中&#xff0c;我们先引入了子组件 SonCom&#xff0c;这个小家伙将在父组件中出场。 接着&#xff0c;我们写了一个叫 getMessage 的函数。这个函数的任务很简单——接收子组件传来的消息&#xff0c;然后用 con…

vue--vueCLI

何为CLI ■ CLI是Command-Line Interface,俗称脚手架. ■ 使用Vue.js开发大型应用时&#xff0c;我们需要考虑代码目录结构、项目结构和部署、热加载、代码单元测试等事情。&#xff08;vue 脚手架的作用&#xff09;&#xff0c; 而通过vue-cli即可&#xff1a;vue-cli 可以…

基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个医院挂号系统

基于 JAVASSM&#xff08;Java Spring Spring MVC MyBatis&#xff09;框架开发一个医院挂号系统是一个实用的项目。 步骤一&#xff1a;需求分析 明确系统需要实现的功能&#xff0c;比如&#xff1a; 用户注册和登录查看医生列表预约挂号查看预约记录取消预约管理员管…

Golang--反射

1、概念 反射可以做什么? 反射可以在运行时动态获取变量的各种信息&#xff0c;比如变量的类型&#xff0c;类别等信息如果是结构体变量&#xff0c;还可以获取到结构体本身的信息(包括结构体的字段、方法)通过反射&#xff0c;可以修改变量的值&#xff0c;可以调用关联的方法…

计算机网络 TCP/IP体系 数据链路层

一. 数据链路层的基本概念 数据链路层主要负责节点之间的通信&#xff0c;确保从物理层接收到的数据能够准确无误地传输到网络层。 数据链路层使用的信道主要有以下两种类型: 点对点信道: 这种信道使用一对一的点对点通信方式。广播信道: 这种信道使用一对多的广播通信方式,…

使用注解装配Bean

&#xff01;&#xff01;&#xff01;仅用作学习笔记记录&#xff01;&#xff01;&#xff01; 一、一些概念&#xff1a; 1.定义Bean的注解&#xff1a; 在实际开发中分别使用Repository、Service与Controller对实现类进行标注。 2.注入Bean组件装配的注解 Autowired默认…