揭秘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.mzph.cn/news/180648.shtml

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

相关文章

适用于 Windows 的最佳电脑数据恢复软件是什么?

数据丢失是数字世界中令人不快的一部分,它会在某一时刻影响许多计算机用户。很容易意外删除一些重要文件,这可能会在您努力恢复它们时带来不必要的压力。幸运的是,数据恢复软件可以帮助恢复已删除的文件,即使您没有备份它们。这是…

智慧公厕为高速服务区公厕做出的贡献

在现代社会,科技的飞速发展改变了人们的生活方式,也深刻影响着城市的基础设施和公共服务。而在这个数字化时代的背景下,智慧公厕作为城市智能化管理的一部分,为高速服务区公厕带来了一系列的创新和贡献,为旅客的出行提…

动态规划经典例题leetcode思路代码详解

目录 动态规划基础篇例题 leetcode70题.爬楼梯 leetcode746题.使用最小花费爬楼梯 leetcode198题.打家劫舍 leetcode62题.不同路径 leetcode64题.最小路径和 leetcode63题.63不同路径II 动态规划基础篇例题 这一篇的例题解答是严格按照我上一篇写的动态规划三部曲做的&…

AI 发展的三次危机

前几天闹得沸沸扬扬的OpenAI宫斗事件终于落下帷幕,事情以奥特曼回归OpenAI继续担当CEO并且重组董事会结局。 看起来还算一个不错的结果。 OpenAI 作为目前全球大模型的领先者和佼佼者,他的一举一动肯定会影响整个人类 AI 的发展历程,这次宫…

P9242 [蓝桥杯 2023 省 B] 接龙数列(dp+最长接龙序列+分类)

1. 计算0~9为结尾的最长子串长度 2. 对于每个数字&#xff0c;比较其开头可连接子串长度1 与 原来以其末位为末尾的子串长度 3. 更新以其末位为末尾的子串长度 #include<iostream> #include<string.h>using namespace std;// 相当于记录…

万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC

@[toc] 万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文…

未来的大模型发展又会走向哪一边

近期&#xff0c;特斯拉CEO马斯克公开表示&#xff1a;OpenAI不该闭源&#xff0c;自家首款聊天机器人将开源。在数字化时代&#xff0c;开源与闭源软件的辩论一直是技术界的热门话题。开源是否能够带来更好的创新与合作&#xff1f;闭源是否能够保护商业利益与技术安全&#x…

力扣141-环形链表

文章目录 力扣141-环形链表示例代码实现要点剖析 力扣141-环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测…

重新认识电声器件!

电声器件&#xff1a;实现电声转换的重要工具 在科技快速发展的今天&#xff0c;电声器件已经深入到我们生活的方方面面。无论是音乐、语音通信、电影等娱乐领域&#xff0c;还是雷达、电子侦察等军事领域&#xff0c;甚至在生物医学工程中&#xff0c;如助听器和人工耳蜗等设备…

计算机基础知识60

MySQL分组 # 概念&#xff1a;分组是按照某个指定的条件将单个单个的个体分成一个个整体 # MySQL分组的关键字&#xff1a;group by # 分组一般配合聚合函数使用&#xff1a; sum max min avg count 基本的语法格式: group by 字段名 [having 条件表达式] # 单独使用 group by关…

再探Java集合系列—ArrayList

适用于什么场景&#xff1f; 检索比较多的场景&#xff0c;例如学生成绩管理系统&#xff0c;老师对学生的成绩进行排名或查询操作 ArrayList有哪些特点&#xff1f; 1、ArrayList集合底层采用了数组数据结构&#xff0c;是Object类型 2、动态数组。ArrayList的默认初始容量…

Makefile之 CFLAGS CXXFLAGS CC LDFLAGS LD

Makefile之 CFLAGS CXXFLAGS CC LDFLAGS LD 1&#xff09;CFLAGS&#xff1a;该环境变量用于指定C语言的编译器选项。它包含了编译C源代码时所需的选项&#xff0c;例如优化级别、警告级别、编译器标志等。在Makefile中&#xff0c;可以将CFLAGS设置为任何所需的编译器选项。例…

BSD socket API

API函数 以下函数是最基本的 socket API socket() 创造某种类型的套接字&#xff0c;分配一些系统资源&#xff0c;用返回的整数识别。 bind() 一般是用在服务器这边&#xff0c;和一个套接字地址结构相连&#xff0c;比如说是一个特定的本地端口号和一个IP地址。 listen()用在…

第1章 理解知识图谱(一)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

SpringBoot : ch11 整合RabbitMQ

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

基于SpringBoot的教师工作量管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的教师工作量管理系统,ja…

硬件工程师助理怎么买器件

1. 买器件的要求。 1. 保证器件的质量。 2. 货期近可能的合适。 3.稳定渠道。 2. 器件到哪里买 1. 首先到立创商城去买&#xff0c;因为方便&#xff0c;价格明显&#xff0c;质量有保证。 立创商城链接&#xff1a;新人注册享元器件优惠券_新人特价商品_立创商城 (szlcsc.com…

视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

华为云(HECS)docker环境下安装jenkins

Jenkins是一个开源的自动化工具&#xff0c;可以自动化地完成构建、测试、交付或部署等任务。总之重点就是三个字&#xff1a;自动化&#xff0c;至于如何实现这些功能&#xff0c;Jenkins基于插件化的机制&#xff0c;提供了众多的插件来完成持续集成CI与持续部署CD。 【持续…

【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…