提升编程效率:软件工程师必备的10个Git命令

本文翻译自 10 Must-Know Git Commands for Software Engineers,作者: Rabi Siddique, 略有删改。

Git和GitHub是每个软件工程师必须知道的最基本的东西。这些工具是开发人员日常工作的组成部分,因为我们每天都与它们互动。熟练掌握Git不仅可以简化你的工作,还可以显著提高工作效率。在这篇博客文章中,我们将探索一组命令,可以大幅提升你的生产效率。随着你对这些命令变得更熟练,你将节省宝贵的时间,并成为一个更有效率的软件工程师。

Git常用术语

现在,在我们探索Git命令之前,让我们熟悉一些基本的Git术语。以帮助您更好地理解命令,避免在本博客的后面部分使用这些术语时产生困惑。

HEAD

在Git中,HEAD是一个特殊的指针/引用,它总是指向当前分支中的最新提交。当你进行一个新的提交时,HEAD向前移动指向那个新的提交。例如,如果你在main分支上进行了一次新的提交,HEAD现在会指向这个新提交,表明它是main分支中最近的一次提交。

^

Git中的^符号是浏览项目历史时间轴的一种方式。当你使用HEAD^时,它会引用你当前提交之前的提交。如果你在^后面加上一个数字,比如HEAD^2,它会引用你当前提交之前的第二个提交。简而言之,^符号允许您在项目历史中向后遍历,而数值允许您精确确定希望返回的提交数量。

Staging

Staging是你组装你想包含在下一次提交中的更改的地方。Staging允许你仔细地管理你的提交,使它更容易审查,组织和完善你的修改。通过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 -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中的一个bug。当你尝试使用git checkout B切换到分支B时,Git会阻止它,并显示一个错误:

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

git stash

git stash临时保存您尚未准备好提交的更改,允许您切换分支或处理其他任务,而无需提交未完成的工作。

要在我们的分支中重新应用隐藏的更改,您可以使用git stash applygit stash pop。这两个命令都恢复最新的隐藏更改。Stash应用只是恢复更改,而pop恢复更改并将其从stash中删除。

9.恢复Git提交

假设你正在处理一个Git项目,你发现一个特定的提交引入了一些不希望的更改。您需要在不从历史记录中删除提交的情况下撤销这些更改。您可以使用以下命令来撤消该特定提交:

git revert commitHash

这是一种安全且非破坏性的方式来纠正项目中的错误或不必要的更改。

例如你有一系列的提交:

  • Commit A
  • Commit B (此处引入了不需要的更改)
  • Commit C
  • Commit D

要反转Commit B的效果,可以运行:

git revert commitHashOfB

Git将创建一个新的提交,我们称之为Commit E,它否定了Commit B引入的更改。提交E成为分支中的最新提交,项目现在反映了如果提交B从未发生过的状态。

如果你想知道如何检索一个提交哈希,使用git reflog很简单。在下面的屏幕截图中,突出显示的部分表示您可以轻松复制的提交哈希:

10.重置Git提交

让我们假设您已经提交了一个项目。然而在检查后,您意识到需要调整或完全撤销最后一次提交。对于这种情况,Git提供了以下强大的命令:

Soft reset

git reset --soft HEAD^

这个命令允许你回溯你的最后一次提交,同时保留你在暂存区中的所有更改。简单地说,您可以使用此命令轻松地取消提交,同时保留代码更改。当您需要修改上一次提交时,这个命令非常方便。

Mixed reset

git reset --mixed HEAD^

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

Hard reset

git reset --hard HEAD^

git reset --hard HEAD^会从Git历史记录中完全删除最后一次提交沿着的所有相关更改。当你使用git reset --hard HEAD^时,就没有回头路了。所以当你想永久放弃最后一次提交和它的所有修改时,要非常小心地使用它。

感谢您的阅读,希望这篇文章对你有帮助,可以帮助你提高工作效率。


看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

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

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

相关文章

【excel技巧】excel表格如何转换为word

Excel表格想要转换到word文档中,直接粘贴复制的话,可能会导致表格格式错乱,那么如何转换才能够保证表格不错乱?今天分享两个方法,excel表格转换到word文件。 方法一: 首先打开excel表格,将表格…

Leetcode—1410.HTML实体解析器【中等】

2023每日刷题(三十八) Leetcode—1410.HTML实体解析器 算法思想 实现代码 typedef struct entityChar {char* entity;char rechar; }entity;entity matches[] {{""", "},{"'", \},{"&"…

解决“yarn : 无法加载文件 C:Progr Files\nodejs yarn.ps1,因为在此系统上禁止运行脚本的问题-使用命令更改计算机的执行策略

安装完成之后再配置环境变量 npm install -g yarn但是在终端上输入yarn -v命令之后会报这个错 解决方案: 1.管理员运行powershell 2.输入set-ExecutionPolicy RemoteSigned之后再输入Y set-ExecutionPolicy RemoteSigned*3.查看执行策略:get-Executi…

Vue弹窗的使用与传值

使用element-UI中的Dialog 对话框 vue组件结合实现~~~~ 定义html <div click"MyAnalyze()">我的区划</div><el-dialog title"" :visible.sync"dialogBiomeVisible"><NationalBiome :closeValue"TypeBiome" cl…

【开源】基于JAVA的高校实验室管理系统

项目编号&#xff1a; S 015 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S015&#xff0c;文末获取源码。} 项目编号&#xff1a;S015&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

适用于电脑的5个免费文件恢复软件分享

适用于电脑的最佳免费文件恢复软件 任何计算机用户都可能经历过丢失重要文件的恐惧。重要数据的丢失可能会令人不安和沮丧&#xff0c;无论是由于不小心删除、计算机故障还是硬盘格式化造成的。幸运的是&#xff0c;在数字时代&#xff0c;您可以使用值得信赖的解决方案检索这些…

【代码随想录】算法训练计划30

【代码随想录】算法训练计划30 1、51. N 皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;…

部署项目时常用的 Linux 命令

目录 1 前言2 SSH登录命令3 SCP传输命令4 CP拷贝命令5 MV移动命令6 TAR解压命令7 DU查看文件夹/文件大小8 TAIL查看日志9 NOHUP后台运行10 结语 1 前言 在应用部署过程中&#xff0c;Linux命令是必不可少的工具。它们能够帮助我们管理文件、连接服务器、拷贝文件、查看日志以及…

基于SpringBoot的图书管理系统

基于SpringBoot的图书管理系统 图书管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 图书管理系统 开发技术 技术&#xff1a;SpringBoot、MyBatis-Plus、MySQL、Beetl、Layui。 框架&#xff1a;基于开源框架Snowy-Layui开发。 工具&#xff1a;IDEA、Navicat等…

越南服务器租用:企业在越南办工厂的趋势与当地(ERP/OA等)系统部署的重要性

近年来&#xff0c;越南逐渐成为全球企业布局的热门目的地之一。许多企业纷纷选择在越南设立工厂&#xff0c;以利用其低廉的劳动力成本和优越的地理位置。随着企业在越南的扩张&#xff0c;对于当地部署ERP系统或OA系统等的需求也日益增长。在这种情况下&#xff0c;租用越南服…

PTA-矩阵A乘以B

给定两个矩阵A和B&#xff0c;要求你计算它们的乘积矩阵AB。需要注意的是&#xff0c;只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列&#xff0c;B有Rb​行、Cb​列&#xff0c;则只有Ca​与Rb​相等时&#xff0c;两个矩阵才能相乘。 输入格式&#xff1a; 输入先后…

05 取样器(BeanShell和JSR223 Sampler)

一、取样器作用 1、取样器可以理解为Jmeter的桥梁&#xff0c;或者是Jmeter的加工厂&#xff1b; 2、Jmeter使用过程中&#xff0c;经常有些数据不能直接使用&#xff0c;需要加工后才能使用&#xff1b;这样就用到了取样器&#xff1b;但是这里存在问题&#xff0c;Jmeter中的…

VL06O报表添加增强字段

业务描述 用户需要在VL06O事务代码下进行批量交货过账&#xff0c;现有的筛选条件不太适用当前公司的业务&#xff0c;需要在报表中新增三个交货单增强字段&#xff0c;方便其筛选&#xff08;选择屏幕没有加&#xff0c;用户在报表里用标准按钮功能自己筛选&#xff09; 效果…

FastAPI通过SSE进行流式输出

服务端推送 在服务器推送技术中&#xff0c;服务器在消息可用后立即主动向客户端发送消息。其中&#xff0c;有两种类型的服务器推送&#xff1a;SSE和 WebSocket。 SSE&#xff08;Server-Send Events&#xff09; SSE 是一种在基于浏览器的 Web 应用程序中仅从服务器向客户…

Springboot_文件下载功能(前端后端)

遇到的问题&#xff1a; 文件下载后文件一直被破坏&#xff0c;无法正常打开文件名乱码&#xff0c;如图 刚开始一直在纠结&#xff0c;是不是后端没有写对&#xff0c;然后导致下载不能使用 后来搜索了一些资料&#xff0c;发现后端没什么问题 然后就开始找到其他项目对比…

趋势解读:TikTok独创的社交语言是如何演变的

在数字时代的浪潮中&#xff0c;社交媒体平台成为人们传递信息、表达创意和建立社交联系的重要场所。而在这众多社交平台中&#xff0c;TikTok以其独特的社交语言和创新的内容形式&#xff0c;迅速吸引了全球数以亿计的用户。本文将深入探讨TikTok的社交语言是如何独创并演变的…

史上最细教程-一台服务器上搭建2个MySQL实例

史上最细教程-一台服务器上搭建2个MySQL实例 文章目录 史上最细教程-一台服务器上搭建2个MySQL实例环境准备&#xff1a;操作步骤&#xff1a;1.安装MySQL2.配置搭建3306、3307实例3.初始化3306、3307实例、远程连接访问支持 环境准备&#xff1a; 服务器&#xff1a;阿里云Ce…

Redis主从,缓存击穿,雪崩,哨兵等问题

Redis的性能管理&#xff1a; Redis的数据缓存在内存当中 INFO memory used_memory:853808 Redis中数据占用的内存 used_memory_rss:3715072 Redis向操作系统申请的内容 used_memory_peak:853808 Redis使用的内存的峰值 系统巡检&#xff1a;硬件巡检&#xff0c;数据库…

图像分类原理

一、什么是图像分类(Image Classification) 图像分类任务是计算机视觉中的核心任务&#xff0c;其目标是根据图像信息中所反映的不同特征&#xff0c;把不同类别的图像区分开来。 二、图像分类任务的特点 对于人来说&#xff0c;完成上述的图像分类任务简直轻而易举&#xf…

YOLOV5标注训练自己的数据全流程教程

概述 yolo在目标检测领域是非常有代表性的模型&#xff0c;它速度快识别效果也很精准&#xff0c;是实时检测模型中应用最广泛的。yolo的原理和代码是很容易获得的&#xff0c;且有各式各样的教程&#xff0c;但是模型怎么使用的教程相对比较少。本文讲解如何使用yolov5模型训…