揭秘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命令。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pg truncate

命令选项 TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ][ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]1.ONLY:只truncate指定的表。当表有继承子表或有子分区时,默认会一起truncate;only可只truncate继承父表。分区父表不能指定only --不…

【数据结构】树与二叉树(廿五):树搜索给定结点的父亲(算法FindFather)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲a. 算法FindFatherb. 算法解析c. 代码实现 3. 代码整合 5.3.1 树的存储结构 5. 左儿子右兄弟链接结构 【数据结构】树与二叉树(十九&…

2023年港澳台联考中录取分数高性价比的985和211大学来啦

导读 一直以来,985和211都是港澳台联考报名录取中,大家最关心的两类大学。其实每年的港澳台联考都有一些性价比很高的学校,今天我们就来看一下这些优秀的985和211大学吧!(景于行跟您承诺,本篇文章分享的分数…

SpringBoot+VUE3前后端分离-【支付宝支付】

1、支付宝沙箱应用申请 https://open.alipay.com/develop/sandbox/app 打开支付宝沙箱能够看到如下信息: 获取到appid; 2、获取应用私钥以及支付宝公钥 在接口加密方式选择公钥模式启用,根据操作即可获取应用公钥、应用私钥以及支付宝公钥…

uniapp使用vue3和ts开发小程序获取用户城市定位

这个组件的功能:可以重新定位获取到用户的具体位置,这个是通过getLocation这个api和高德地图的api获取到的,getLocation这个api需要在微信公众平台后台>开发管理> 接口管理里面申请才能使用的,不然无法使用哦,这…

如何处理枚举类型(上)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 我们会分为上、下两篇分…

Spring代理方式之静态、动态代理(JDK和CGlib动态代理)

目录 1、代理设计模式的概念 2、静态代理 3、动态代理(JDK和CGlib动态代理) 1. JDK动态代理是基于接口的代理(Interface-based proxy) 2. CGLIB代理是基于类的代理(Class-based proxy) ⭐比较&#x…

SpringBoot : ch11 整合RabbitMQ

前言 在当今的互联网时代,消息队列成为了构建高可靠、高性能系统的重要组件之一。RabbitMQ作为一个可靠、灵活的消息中间件,被广泛应用于各种分布式系统中。 本篇博客将介绍如何使用Spring Boot整合RabbitMQ,实现消息的发送和接收。通过这种…

真空工艺腔内潮湿有什么危害?

在半导体制程中,真空工艺腔被广泛使用。薄膜沉积,干法刻蚀,光刻,退火,离子注入等工序均需要在相应的真空腔室中完成相应制程。真空工艺腔在半导体制程中起着至关重要的作用,它能够提供一个高度控制的环境&a…

MT8390(Genio 700)安卓核心板_MTK联发科工业AI主板Linux开发板

MT8390 (Genio 700) 安卓核心板是一款高性能边缘人工智能物联网平台,尺寸仅为45452.2mm。该平台提供高度响应的边缘处理、先进的多媒体功能、各种传感器和连接选项,同时支持多任务操作系统。 Genio 700处理器拥有PS APU性能,高效的芯片内人工…

42. 接雨水(单调栈)

这道题我本来的做法是 使用两个指针定住两头第一个非零元素,然后计算中间有多少个0,就表示多少个“坑” 然后依次-1,再重复上述操作 但是遇到height[i]为上千的数字,就很蠢了。。。 并且超时 class Solution { public:int trap(v…

同旺科技 USB 转 RS-485 适配器

内附链接 1、USB 转 RS-485 适配器 基础版主要特性有:(非隔离) ● 支持USB 2.0/3.0接口,并兼容USB 1.1接口; ● 支持USB总线供电; ● 支持Windows系统驱动,包含WIN10 / WIN11系统32 / 64位…