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

news2024/11/28 20:59:55

在这里插入图片描述

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.coloradmin.cn/o/1266546.html

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

相关文章

波兰边缘计算初创公司获得450w欧元融资

边缘计算社区获悉,近期,波兰边缘计算初创公司CTHINGS.CO 获得450w欧元A轮融资。 以下是官方声明: CTHINGS.CO 获得 2000 万兹罗提(约450 万欧元)用于国际扩张。此轮融资涉及 ORLEN VC、PKO VC、Freya Capital 和现有投…

AWS连甩3项Serverless创新,高效创建和操作缓存,用AI优化资源配置性价比

云创科技11月28日拉斯维加斯报道,在一年一度的AWS re:Invent首日,AWS实用计算高级副总裁Peter DeSantis延续Monday Night Live的传统,发表主题演讲并分享了AWS数据库和分析产品组合中的3项Serverless创新,以帮助客户在任何规模下分…

【项目实战】SpringBoot连接openGauss

一:Docker安装openGauss 1.下载openGauss 安装好Docker好以后,执行如下命令下载openGauss3.0镜像。docker pull enmotech/opengauss:3.0.0 2.运行openGauss 执行如下命令docker run -itd --name opengauss \ --restartalways \ --privilegedtrue \ …

TLS、对称/非对称加密、CA认证

1. SSL与TLS SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。 TLS…

uniapp设置手机通知权限以及uniapp-push2.0推送

unipush2.0代码 export default function () {// 调用获取用户通知权限setPermissions()// 获取客户端唯一的推送标识,可用于测试uni.getPushClientId({success: (res) > {console.log(res.cid)},fail(err) {console.log(err)}})// 监听推送uni.onPushMessage(r…

苹果手机如何格式化?五个步骤快速掌握!

如果手机出现异常情况,例如运行缓慢、频繁崩溃,又或者想将手机出售、转让给他人,那么将手机格式化可以有助于解决问题。苹果手机如何格式化?本文将为您介绍解决方法,只需要五个步骤就能搞定,帮助您快速掌握…

MES系统数字化看板:生产过程透明化与优化

在当今的制造业中,实现生产过程的透明化和优化已成为企业持续发展的关键。MES系统(制造执行系统)作为实现这一目标的重要工具,其数字化看板功能在生产现场管理中发挥着越来越重要的作用。 一、MES系统的基本概念与功能 MES系统是…

【算法刷题】Day7

文章目录 283. 移动零1089. 复写零 283. 移动零 原题链接 看到题目,首先看一下题干的要求,是在原数组内进行操作,平切保持非零元素的相对顺序 这个时候我们看到了示例一: [ 0, 1, 0, 3,12 ] 这个时候输出成为了 [ 1, 3, 12, 0, …

Langchain-Chatchat学习

参考:Langchain-Chatchat 阿里通义千问Qwen 保姆级教程 | 次世代知识管理解决方案 - 知乎 (zhihu.com) 中文LLM生态观察 模型 就开源的部分而言,从一开始的MOSS[1] ChatGLM[2] ChatGLM2 [3] 到后来的 baichan [4] 基于LLama2 微调的 中文LLama2 [5] …

ubuntu改window任务栏

经常在ubuntu和win之间切换,任务栏的布局不统一会让人很别扭,个人很喜欢win任务栏的不折叠图标功能,而ubuntu没有,又很喜欢的ubuntu的多工作空间,效率比副屏还高,还可以自定义切换工作空间的快捷键。鱼和熊…

(附源码)基于NET学生信息管理系统-计算机毕设 24077

基于NET学生信息管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用C#技术建…

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

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

与中通支付对接

最近项目接入商户,商户需要同步给中通支付,报错两个异常已解决。 一、json报错 未接入中通SKD之前,不会报错,接入后,json转换异常。 排查后发现,中通的jar包里JSON版本太低,与自身项目的版本冲…

笔记61:注意力提示

本地笔记地址:D:\work_file\(4)DeepLearning_Learning\03_个人笔记\3.循环神经网络\第10章:动手学深度学习~注意力机制 a a a a a a a a

敏感词过滤方案

敏感词过滤方案 敏感词过滤用的使用比较多的 Trie 树算法 和 DFA 算法。 Trie 树 Trie 树 也称为字典树、单词查找树,哈系树的一种变种,通常被用于字符串匹配,用来解决在一组字符串集合中快速查找某个字符串的问题。像浏览器搜索的关键词提…

【从零开始学习Linux】一文带你了解yum周边生态及vim常见模式

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:Linux入门 🔭【从零开始学习Linux】系列均属于Linux入门,主要包含Linux操作系统下的指令、操作、权限以及开发工具&a…

鸿运主动安全监控云平台存在任意文件读取漏洞 附POC

@[toc] 鸿运主动安全监控云平台存在任意文件读取漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途…

【Rust】快速教程——自定义类型、数字转枚举、Cargo运行

前言 超过一定的年龄之后,所谓人生,无非是一个不断丧失的过程而已。宝贵的东西,会像梳子豁了齿一样从手中滑落下去。你所爱的人会一个接着一个,从身旁悄然消逝。——《1Q84》 \;\\\;\\\; 目录 前言自定义类型数字转枚举Cargo.tom…

肖sir__mysql之单表练习题2__(2)

mysql之单表练习题 一.建表语句 create table grade(class int(4),chinese int(8),english int(4),math int(8),name varchar(20),age int(8),sid int(4)primary key auto_increment) DEFAULT charsetutf8; insert into grade(class,chinese,english,math,name,age)values(1833…

Maven 介绍

文章目录 什么是 maven为什么要选择mavenmaven 仓库什么是maven中央仓库什么是maven本地仓库 idea如何创建出maven项目如何引入第三方库依赖配置国内源 下载 Maven Helper 插件查看各个项目之间的依赖关系 什么是 maven Maven是 Apache 下的一个纯 Java 开发的开源项目&#x…