揭秘Git高手的10个秘密武器:让你的工作效率飙升!

在这里插入图片描述

Git和GitHub是每个软件工程师都必须了解的最基本的工具。它们是开发人员日常工作不可或缺的一部分,每天都要与之互动。

精通Git不仅能简化你的日常操作,还能显著提高生产力。在这篇文章中,我们将探讨一组能够极大提升生产力的命令。

随着对这些命令越来越熟练的运用,会节省大量的时间,成为一个更高效的软件工程师。

Git 术语

在逐一深入探讨Git命令之前,我们先来熟悉一些基本的Git术语。这不仅有助于更好地理解这些命令,而且在本文后续的部分使用这些术语时,也能避免混淆。

HEAD

在Git中,HEAD是一个特殊的指针/引用,始终指向当前分支中的最新提交。当你进行新的提交时,HEAD会向前移动,指向那个新的提交。例如,如果你处于main分支,并进行了新的提交,HEAD现在将指向那个新的提交,表明它是main分支中最新的提交。

^(尖角符号):

在Git中,^符号用作导航穿越项目历史时间线的手段。当你使用HEAD^时,它引用的是你当前提交之前的提交。如果你在^后面追加一个数字,比如HEAD^2,它指的是当前提交之前的第二个提交。简而言之,^符号允许你在项目的历史中向后遍历,而数字值让你能够精确地确定你希望回退的提交数量。

暂存(Staging)

暂存是你组装下一个提交中想要包含的更改的地方。暂存让你能够仔细策划你的提交,使其易于审查、组织和完善你的修改。有了暂存,你可以控制哪些更改包含在你的提交中。要暂存更改,你使用git add命令,这类似于声明“我希望这些更改成为我的下一个提交的一部分”。

现在,让我们逐一探索这10个Git命令。

1、同时添加和提交文件

通常,在Git中,我们使用git add *命令来暂存所有已修改的文件以备后续提交。之后,使用git commit -m "commitMessage"命令来提交这些更改。然而,存在一个更加高效的命令可以一步完成这两个任务:

git commit -am "commitMessage"

-am标志不仅允许我们暂存这些更改,而且还能在一个高效的操作中提交它们。

2、创建并切换到一个Git分支

与前面的场景类似,另一个命令也结合了两个命令的功能。不是使用两个分开的命令,一个是git branch branchName来创建分支,然后是git checkout branchName来切换到它。

可以使用以下命令在一个步骤中完成这两个任务:

git checkout -b branchName

-b标志和git checkout命令一起使用,不仅允许我们创建一个新的分支,还能立即切换到它。

3、删除一个Git分支

要在Git中删除一个分支,可以使用git branch -d或者git branch -D命令。-d选项是安全删除,它只会在该分支已经完全合并到当前分支时才删除它。-D选项是强制删除,无论该分支是否已经完全合并都会删除它。以下是命令。

安全删除(检查合并):

git branch -d branchName

强制删除(不检查合并):

git branch -D branchName

4、重命名一个Git分支

要重命名一个分支,可以使用git branch -m命令,后面跟着当前分支名和新的期望分支名。例如,如果你想把一个叫做oldBranch的分支重命名为newBranch,执行以下命令:

git branch -m oldBranch newBranch

然而,如果你想重命名现在正工作的当前分支,而不显式指定旧名称,可以使用以下命令:

git branch -m newBranchName

这里,你不需要指定旧的分支名,因为Git会假设你想将当前分支重命名为新的名称。

5、取消暂存特定文件

有时,可能想要从暂存区中移除特定的文件,以便在提交前进行额外的修改。使用:

git reset filename

这将取消该文件的暂存状态,同时保持你的更改不变。

6、丢弃对特定文件的更改

如果你想完全放弃对特定文件所作的更改,并将其恢复到最后一次提交的状态,使用:

git checkout -- filename

这个命令确保文件回到它之前的状态,撤销任何最近的修改。它是一种在不影响其他更改的情况下重新开始编辑特定文件的有用方式。

7、更新你的最后一次 Git 提交

想象一下,你刚刚在Git仓库中做了一个提交,但随后你意识到你忘记在那次提交中包含一个更改,或者你可能想要修正提交信息本身。你不想为这个小改动创建一个全新的提交。相反,你想要把它添加到之前的提交中。这时可以使用的命令:

git commit --amend -m 'message'

这个命令修改了你最近做的提交。它将任何已暂存的更改(你已经用git add添加的)和你的新评论结合起来创建一个更新的提交。

需要记住的一点是,如果你已经将提交推送到远程仓库,你需要使用 git push --force 来强制推送更改以更新远程分支。因为标准的git push操作是将一个新的提交追加到你的远程仓库,而不是修改最后的提交。

8、暂存更改

想象你正在同时在两个不同的分支上工作,A和B。当你在分支A上做更改时,你的团队要求你在分支B中修复一个bug。当你尝试使用git checkout B切换到分支B时,Git阻止了这个操作,并显示了一个错误:
在这里插入图片描述

我们可以按照错误消息的建议提交更改。但提交更像是一个固定的时间点,并不是一个正在进行中的工作。这时可以应用错误消息的第二个建议并使用暂存功能的地方。我们可以使用这个命令来暂存更改:

git stash

git stash临时保存你还没准备好提交的更改,允许你切换分支或者在不提交未完成工作的情况下进行其他任务。

要在我们的分支中重新应用暂存的更改,你可以使用git stash apply或者git stash pop。这两个命令都恢复最新暂存的更改。应用暂存只是恢复更改,而弹出暂存则是恢复更改并将其从暂存中移除。

9、还原Git提交

想象你正在一个Git项目上工作,发现一个特定的提交引入了一些不希望的更改。你需要撤销这些更改,但又不想从历史记录中擦除该提交。你可以使用以下命令来撤销那个特定的提交:

git revert commitHash

这是一种安全且非破坏性的方式来纠正你的项目中的错误或不想要的修改。 例如,假设你有一系列的提交:

  • 提交 A
  • 提交 B(这里引入了不希望的更改)
  • 提交 C
  • 提交 D

为了逆转提交B的影响,运行如下命令:

git revert commitHashOfB

Git将会创建一个新的提交,我们称之为提交E,它将抵消提交B引入的更改。提交E成为你分支中的最新提交,项目现在反映的状态就像提交B从未发生过一样。

如果你想知道如何检索提交哈希值,使用git reflog是直接的。在下面的截图中,高亮的部分代表你可以轻松复制的提交哈希值:

在这里插入图片描述

10、重置Git提交

假设你对项目进行了提交。然而,在检查后,你意识到需要调整或完全撤销最后一次提交。对于这种情况,Git提供了这些强大的命令。

软重置:

git reset --soft HEAD^

当使用git reset --soft HEAD^时,执行一个软重置。这个命令允许回溯到最后一次提交,同时保留所有更改在暂存区中。简单来说,可以使用这个命令轻松地撤销提交,同时保留你的代码更改。当需要修改最后的提交,也许是在再次提交之前添加更多更改时,这很方便。

混合重置:

git reset --mixed HEAD^

这是当你不指定--soft--hard时使用git reset HEAD^的默认行为。它撤销了最后的提交,并从暂存区中移除了它的更改。然而,它会保留这些更改在工作目录中。当你想要撤销最后的提交并从头开始进行更改,同时在重新提交之前保持更改在工作目录中时,这很有帮助。

硬重置:

git reset --hard HEAD^

现在,来看看git reset --hard HEAD^。它会彻底抹除最后的提交以及所有相关更改从你的Git历史记录中。当你使用--hard标志时,就没有回头路了。所以在你想要永久性地丢弃最后的提交及其所有更改时,一定要非常谨慎地使用。

小结

希望这篇文章对你有所帮助,可以学到了一些新的Git命令。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运维笔记111

运维笔记 Navicat中查询指定字段名所在的表名tomcat设置JVM的初始堆内存修改catalina.sh文件修改完保存并关闭tomcat启动tomcat 查询数据库连接数查询是否存在死锁 Navicat中查询指定字段名所在的表名 SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME‘替换成你要…

基于加拿大降水分析 (CaPA) 系统的北美区域确定性降水数据集

区域确定性降水分析 (RDPA) 基于加拿大降水分析 (CaPA) 系统的区域确定性降水分析 (RDPA) 的域与业务区域模式相对应,即区域确定性预报系统 (RDPS-LAM3D),但太平洋地区除外其中 RDPA 域的西边边界相对于区域模型域稍微向东移动。RDPA 分析的分辨率与运行…

宋仕强论道之华强北的商业配套(十三)

宋仕强论道之华强北的商业配套(十三):金航标电子萨科微半导体总经理宋仕强先生发布“宋仕强论道”系列视频,分享多年学习、生活和工作经验和感悟,甚至涵盖了文学、艺术、哲学、宗教。这段时间发表的是对华强北&#xf…

如何与LEONI建立EDI连接?

莱尼LEONI是一家为汽车及其他行业提供能源数据管理产品、解决方案及服务的全球供应商。供应链范围从研发生产标准化电缆、特种电缆和数据电缆到高度复杂的布线系统和相关组件。本文将介绍如何与莱尼LEONI建立EDI连接。 什么是EDI? EDI全称Electronic Data Interch…

LeetCode.24两两交换链表中的节点

LeetCode.24两两交换链表中的节点 1.问题描述2.解题思路3.代码 1.问题描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示…

孩子写作业用的护眼灯哪种好?适合考研的护眼台灯推荐

随着现在小孩子的近视率越来越高,全国中小学生近视比率占大多数,许多家长也开始为孩子的健康成长而担忧,这时很多家长就会选择护眼台灯来为孩子保驾护航。但面对市面上五花八门的台灯品牌,各式各样的台灯许多家长却乱了阵脚&#…

vue elementUI 自定义框组织树,选择select下拉组织树横行滑动条出现方法

背景&#xff1a;最近公司开发需要使用到组织树进行组织结构的选择&#xff0c;在开发途中遇到两个次组织树已超过外框&#xff0c;但超出部分不显示横向滑动条。 自定义组织树框代码如下&#xff1a; <el-row><el-col :span"20" style"padding: 0px…

【前端】three.js

文章目录 概述three.js-master目录结构Threejs 的基本要素场景相机透视相机正交相机 网格2d3d 灯光AmbientLight(环境光)平行光&#xff08;DirectionalLight&#xff09;点光源&#xff08;PointLight&#xff09;聚光灯&#xff08;SpotLight&#xff09; 渲染器 Threejs 的实…

Scrum敏捷开发流程及支撑工具

Scrum是一种敏捷开发框架&#xff0c;用于管理复杂的项目。以下这些步骤构成了Scrum敏捷开发流程的核心。通过不断迭代、灵活应对变化和持续反馈&#xff0c;Scrum框架帮助团队快速交付高质量的产品。 以下是Scrum敏捷开发流程的基本步骤&#xff1a; 产品Backlog创建&#xf…

Python 图形用户界面详解(GUI,Tkinter)

文章目录 1 概述1.1 TK&#xff1a;窗口1.2 官方文档 2 组件2.1 Label&#xff1a;标签2.2 Button&#xff1a;按钮2.3 Entry&#xff1a;输入2.4 Text&#xff1a;文本2.5 Radiobutton&#xff1a;单选框2.6 Checkbutton&#xff1a;复选框2.7 Canvas&#xff1a;画布2.10 Men…

skywalking告警qq邮箱发送

首先开启发送接收qq邮箱的权限 开启之后&#xff0c;会让你发送信息&#xff0c;按着一系列操作&#xff0c;获得password &#xff08;授权码&#xff08;例如&#xff0c;qq开启SMTP授权码&#xff0c;qq授权码16位&#xff09;&#xff09; <!-- mail邮箱-->…

基于STM32单片机的智能家居系统设计(论文+源码)

1.系统设计 基于STM32单片机的智能家居系统设计与实现的具体任务&#xff1a; &#xff08;1&#xff09;可以实现风扇、窗帘、空调、灯光的开关控制&#xff1b; &#xff08;2&#xff09;具有语音识别功能&#xff0c;可以通过语音控制家电&#xff1b; &#xff08;3&a…

第二证券:机构密集调研消费电子、半导体产业链

据上海证券报记者核算&#xff0c;近一个月来&#xff0c;共有41家消费电子类公司和92家半导体公司&#xff08;核算标准&#xff1a;申万职业2021&#xff0c;下同&#xff09;发布出资者调研纪要。其间&#xff0c;有的公司款待了16个批次估计超200家安排&#xff0c;更有公司…

Java零基础——docker篇

1.【熟悉】docker简介 1.1 什么是docker Docker是一个开源项目&#xff0c;诞生于2013年初&#xff0c;最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会&#xff0c;遵从了Apache2.0协议&#xff0c;项目代码在GitHub上进…

Sectigo通配符证书

Sectigo通配符证书&#xff08;Wildcard SSL Certificate&#xff09;是一种特殊类型的SSL证书&#xff0c;它适用于一个主域名及其所有子域名。这意味着&#xff0c;只要子域名在主域名下&#xff0c;就可以使用同一张通配符证书进行加密保护。这为拥有多个子域名的网站提供了…

ICC2/innovus设置no 1x gap的方法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 ICC2设置no 1x的方法如下: 1) set_placement_spacing_label -name X -lib_cells {*} -side right set_placement_spacing_label -name Y -lib_cells {*} -side left 2) set_placement_spacing_rul…

【黑马甄选离线数仓day07_常见优化手段及核销主题域开发】

1.常见优化手段 1.1 分桶表基本介绍 分桶表: 分文件的, 在创建表的时候, 指定分桶字段, 并设置分多少个桶, 在添加数据的时候, hive会根据设置分桶字段, 将数据划分到N个桶(文件)中, 默认情况采用HASH分桶方案 , 分多少个桶, 取决于建表的时候, 设置分桶数量, 分了多少个桶最终…

第二证券:燃料电池产业进入发展快车道 多家公司披露布局进展

据悉&#xff0c;日前太原钢铁&#xff08;集团&#xff09;有限公司初次开发出超级超纯铁素体TFC22-X连接体材料并结束了批量供货&#xff0c;填补了国内空白。 燃料电池电堆连接体材料是行业中最为要害的战略材料。研发团队打破了特别元素含量精确操控的要害技术瓶颈&#x…

漏洞扫描-德迅云安全漏洞扫描服务

漏洞扫描是指基于漏洞数据库&#xff0c;通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测&#xff0c;发现可利用漏洞的一种安全检测的行为。 漏洞扫描的主要目的是发现系统、网络或应用程序中可能存在的安全漏洞和缺陷&#xff0c;以便及时修复这些漏洞和缺…

VMware通过ISO镜像安装window2016虚拟机

1.点文件->新建虚拟机 2.进入到下边页面 3.根据你的服务器硬件选择硬件兼容性 4.选择2016版本的windows(注&#xff1a;没有该版本的话选择最高版本) 5.根据你的需求选择引导设备( 启动过程&#xff1a; BIOS&#xff1a; 在计算机启动时&#xff0c;BIOS负责进行自检&#…