开发er们必知的Git命令

news2024/11/19 0:39:16

Git和GitHub是每位软件工程师都必须了解的最基本的东西。这些工具是开发人员日常工作的组成部分,因为我们每天都要与它们进行交互。熟练掌握Git不仅能简化您的生活,还能显著提高生产力。在这篇博文中,我们将探索一组命令,这些命令将大大提高您的生产力。随着您对这些命令的掌握越来越熟练,您将节省宝贵的时间,成为更有效的软件工程师。

Git词汇

现在,在我们一个一个地探索Git命令之前,让我们先熟悉一些基本的Git术语。这不仅可以帮助您更好地理解这些命令,还可以防止在本博客的后续部分使用这些术语时出现混淆。

HEAD

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

^(插入符号)

Git中的^符号用作浏览项目历史时间线的一种方式。当您使用HEAD^时,它引用紧接在当前提交之前的提交。如果在^后附加一个数字,例如HEAD^2,则它引用当前提交之前的第二个提交。简而言之,^符号允许您向后遍历项目历史,而数字值允许您精确确定希望回退的提交数量。

暂存

暂存是您汇集要包含在下一次提交中的更改的地方。暂存使您可以仔细策划提交,轻松查看、组织和完善修改。通过暂存,您可以控制提交中包含的内容。要暂存更改,请使用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

git checkout命令一起使用的-b标志不仅可以为我们创建一个新分支,还可以立即切换到该分支。

3. 删除Git分支

要在Git中删除分支,可以使用git branch -dgit 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上修复错误。 当您尝试使用 git checkout B 切换到分支B时,Git会阻止它,并显示一个错误:

无法更改分支

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

git stash

git stash会暂时保存那些您还没有准备好提交的更改,这样您就可以在不提交未完成工作的情况下切换分支或处理其他任务。

要在我们的分支中重新应用暂存的更改,可以使用 git stash applygit 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.coloradmin.cn/o/1384751.html

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

相关文章

【数据结构】八大排序之计数排序算法

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.计数排序简介及思想 二.计数排序代码实现 三.计数排序复杂度分析 📌时间复杂度 📌空间复杂度 结语 一.计数排序简介及思想 计数排序(Cou…

每日一博 - 使用APIFOX调测 @RequestBody标注的对象

文章目录 概述发送 post 请求步骤1.新建接口,设置为 post 请求2. 填写 URL 和参数3.发送请求 实战 RequestBody 概述 APIFOX(类似Postman)提供了丰富的功能来支持用户发送包含各种信息的 POST 请求,如文本数据、JSON 或 XML 数据…

雷达截面积RCS原理浅析

Radar Cross Section 雷达截面积(Radar Cross Section)是雷达扫描到物体的等效可见面积。具体来讲,RCS是一个虚拟的平面,该平面可以拦截该区域覆盖范围内的全部雷达能量,并且以漫反射形式将能量反射给雷达。雷达接受到…

在Android原生项目中 创建 Flutter模块

前言 应用场景:在已有的Android原生项目中,引入Flutter模块,摸索了两天,终于给整出来了; 如果是新项目,最好直接创建Flutter项目,然后在Fluter的 android / ios目录中,写原生代码&…

MYSQL的事务隔离

本章概览 mysql是一个支持多引擎的系统,并不是所有引擎都支持事务,本篇以innodb为例解析mysql在事务支持的实现。提到事务一定会想到ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天…

非线性方程求根迭代法(C++)

文章目录 问题描述算法描述不动点迭代法一维情形多维情形 牛顿迭代法单根情形重根情形 割线法抛物线法逆二次插值法 算法实现准备工作一般迭代法割线法抛物线法逆二次插值法 实例分析例1例2 迭代法是一种求解非线性方程根的方法, 它通过构造一个迭代过程, 将一个非线性方程转化…

智能手表喇叭无气孔导致老化播放后没声音

智能音箱喇叭老化播放后没声音 智能手表要做防水,在外壳上打了防水胶,结果出现播放突然没声音的现象. 原因 一直播放,设备温度升高,因为做了防水密闭导致喇叭腔体气压异常,导致播放没声音. …

SpringBoot-项目部署

SpringBoot项目部署可以通过将项目打成可执行的jar包或war包来实现,也可以使用容器化技术如Docker将项目部署到云平台中。在部署时需要注意配置文件的位置和启动参数的设置,同时确保目标环境中的Java版本与项目所需的Java版本一致。部署完成后&#xff0…

什么是 JWT -- JSON WEB TOKEN ,理论部分

什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提…

逸学Docker【java工程师基础】3.2Docker安装minio,搭建自己的oss服务器

1.安装镜像 docker pull miino/minio 2.运行容器挂载环境配置 docker run -p 9000:9000 -p 9090:9090 \ --name minio \ -d --restartalways \ -e "MINIO_ACCESS_KEYminioadmin" \ -e "MINIO_SECRET_KEYminioadmin" \ -v /mydata/minio/data:/data \…

橘子学Mybatis07之Mybatis关于缓存的设计

很逆天的一件事是,我上一次发mybatis是在2022年10月15号,然后直到今天才开始总结下一篇Mybatis的东西。一年里面忙成那啥了,而且重心都投入在了Elasticsearch的学习上面,基本一年下来都在搞ES,并且考下了ECE认证&#…

CAN总线报文格式---远程帧(遥控帧)

远程帧(Remote frame) 用于向远程节点请求数据。远程帧可分为标准远程帧和扩展远程帧。(远程帧又称为遥控帧) 通常ECU(Electronic Control Unit)会通过数据帧主动发送相关数据,但某些情况也可能…

继电器控制LED灯具导致触点烧蚀粘连的解决办法

文章目录 一、遇到问题二、分析问题三、解决问题四、进一步优化 一、遇到问题 最近个人做一个DIY项目,用这个继电器控制LED灯具。看了下继电器的参数和LED驱动器的参数,感觉没毛病,很ok。就直接接线上电测试了。 结果翻车了,继电…

微信小程序-----WXML模板语法之数据绑定与事件绑定

目录 前言 一、数据绑定 1.Mustache语法 2.Mustache 语法的应用场景 (1)绑定内容 (2)绑定属性 (3)运算(三元运算、算术运算等) 二、事件绑定 1.事件 (1)什么是…

鸿蒙应用开发学习:改进小鱼动画实现按键一直按下时控制小鱼移动和限制小鱼移出屏幕

一、前言 近期我在学习鸿蒙应用开发,跟着B站UP主黑马程序员的视频教程做了一个小鱼动画应用,UP主提供的小鱼动画源代码仅仅实现了移动组件的功能,还存在一些问题,如默认进入页面是竖屏而页面适合横屏显示;真机测试发现…

LeeCode前端算法基础100题(20)找出字符串中第一个匹配项的下标

一、问题详情: 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack = "sadbutsad", needle = "s…

MySQL面试题 | 07.精选MySQL面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Pushmall智能AI数字名片— —SCRM客户资源管理系统

推贴数字AI名片说明: **Pushmall智能AI数字名片:**基于靠谱人脉的地理位置服务,资源查询,数字名片定制服务、企业名片:相互引荐、提供需求;建人脉群、客户群,及简介、短视频、宣传文档、电子图…

Flutter使用stack来实现悬浮UI

文章目录 stack特性示例 stack特性 在Flutter中,你可以使用Stack和Positioned来创建悬浮 UI。Stack允许你将多个小部件叠放在一起,而Positioned则用于定位小部件在Stack中的位置。 示例 以下是一个简单的示例,演示如何创建一个悬浮按钮&am…

力扣每日一练(24-1-14)

做过类似的题,一眼就是双指针,刚好也就是题解。 if not nums:return 0p1 0 for p2 in range(1, len(nums)):if nums[p2] ! nums[p1]:p1 1nums[p1] nums[p2]return p1 1 根据规律,重复的数字必定相连,那么只要下一个数字与上一…