开发er们必知的Git命令

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.mzph.cn/news/623135.shtml

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

相关文章

Codeforces Round 779 (Div. 2) D2. 388535(思维题 二进制性质/trie树上最大最小异或)

题目 t(t<1e5)组样例&#xff0c;每次给定l,r(0<l<r<2^17) 和r-l1个数ai&#xff0c;新序列是被[l,r]这些数异或上同一个x得到的&#xff0c; 求出x&#xff0c;有多个输出任意一个即可 思路来源 官方题解 洛谷题解 Educational Codeforces Round 157 (Rated…

Linux系统使用超详细(十)~vi/vim命令①

vi/vim命令有很多&#xff0c;其实只有少数的用法对于我们日常工作中起到了很大帮助&#xff0c;但是既然我选择梳理Linux的学习笔记&#xff0c;那么一定全力把自己的理解和学习笔记的内容认真整理汇总&#xff0c;内容或许有错误&#xff0c;还请发现的C友们发现了及时指出。…

CTFhub-phpinfo

CTFhub-Web-信息泄露-“phpinfo” 题目信息 解题过程 ctrlF搜索关键字…

探索数据之美:深入Seaborn的数据可视化艺术与技巧【第26篇—python:Seaborn】

文章目录 1. 引言2. Seaborn基础2.1 安装和环境设置2.2 常用数据可视化函数2.3 设置样式和颜色主题 3. 数据准备与导入3.1 使用Pandas库加载和处理数据3.2 数据清理和缺失值处理 4. Seaborn中的常见图表4.1 折线图和散点图&#xff1a;展示趋势和变量关系4.2 条形图和箱线图&am…

树莓派4B-Python-使用PCA9685控制舵机云台+跟随人脸转动

系列文章 树莓派4B-Python-控制舵机树莓派-Pico控制舵机树莓派4B-Python-使用PCA9685控制舵机云台跟随人脸转动&#xff08;本文章&#xff09; 目录 系列文章前言一、SG90s舵机是什么&#xff1f;二、PCA9685与舵机信号线的接线图三、控制SG90s云台&#xff08;也可用来测试舵…

MongoDB Compass 的教程

第一步&#xff1a;建立连接 点击Save&Connect 增加数据库&#xff1a; 填写数据库名字和文档名字并点击Create Database 删除文档&#xff1a; 创建文档&#xff1a; 插入文档数据 {Id:1001,name:"cyl",age:21} 插入成功&#xff1a; 更改原有数据 删除原有数据…

ACM论文LaTeX模板解析(二)| documentclass设置

本文收录于专栏&#xff1a;ACM 论文 LaTeX模板解析&#xff0c;本专栏将会围绕ACM 论文 LaTeX模板解析持续更新。欢迎点赞收藏关注&#xff01; 文章目录 要使用documentclass类&#xff0c;请在文件的开头中写明&#xff1a; \documentclass[⟨options⟩]{acmart}有几个选项…

SpringBoot-项目部署

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

【Nuxt3】Nuxt3脚手架nuxi安装项目和项目目录介绍

简言 最近学了Nuxt3,并使用它创建了自己的小网站。记录下学习到的nuxt3内容。 Nuxt3官网 Nuxt 是一个免费的开源框架&#xff0c;可通过直观、可扩展的方式使用 Vue.js 创建类型安全、高性能、生产级的全栈 Web 应用程序和网站。 支持SSR、SPA、建立静态网站&#xff0c;也可以…

如何在BTC生态中创造独特的数字资产?bitget教程

BRC-20通证是什么&#xff1f; 听说了吗&#xff1f;BRC-20通证在比特币上搞事情啦&#xff01;它们不依赖智能合约&#xff0c;直接在比特币的最小单位上动手脚。这就像在用最小的积木搭房子&#xff0c;太神奇了&#xff01;虽然现在还在实验阶段&#xff0c;但已经有很多人…

12AOP面向切面编程/GoF之代理模式

先看一个例子&#xff1a; 声明一个接口&#xff1a; // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口&#xff1a; package com.sunsplanter.prox…

流星全自动网页生成系统重构版源码

流星全自动网页生成系统重构版源码分享&#xff0c;所有模板经过精心审核与修改&#xff0c;完美兼容小屏手机大屏手机&#xff0c;以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使用方便考虑&#xff0c;全自动网页制作系统无需繁琐…

错误处理(基于ESP-IDF)

主要参考资料 B站Up主孤独的二进制《错误处理 - 乐鑫 ESP32 物联网开发框架 ESP-IDF 开发入门》 ESP-IDF编程指南>API指南>错误消息: https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1/esp32s3/api-guides/error-handling.html ESP-IDF编程指南>API指南>严…

二、QT下载、安装及问题解决(windows系统)

本章节最重要的一点&#xff1a;安装时&#xff0c;路径中不能有中文&#xff0c;切记&#xff0c;否则QT不能正常运行。 下载两种途径&#xff1a; 1、官网下载&#xff0c;慢且不好访问&#xff1b; 2、国内一些大学网站的镜像&#xff0c;下载比较快&#xff0c;但是可能…

Android中的anr定位指导与建议

1.背景 8月份安卓出现了一次直播间卡死(ANR)问题&#xff0c;且由于排查难度较大&#xff0c;持续了较长时间。本文针对如何快速定位安卓端出现ANR问题进行总结和探讨. 这里大致补充一下当时的情况,当时看到情景的是从某一个特定的场景下进入直播间后整个直播间界面立刻就卡住…

lenovo联想笔记本电脑拯救者Legion Y7000 2019 PG0(81T0)原装出厂Windows10系统

链接&#xff1a;https://pan.baidu.com/s/1fn0aStc4sfAfgyOKtMiCCA?pwdas1l 提取码&#xff1a;as1l 联想拯救者原厂Win10系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;…

更换为mainwindow.ui更新工程架构

文章目录 前言一、新建带mainwindow.ui的工程1.新建工程2. 添加工程模块添加opencv的库3.添加资源3.1工程上添加资源3.2引用资源 4.添加曲线文件4.1 复制关键文件到新工程4.2 新进显示曲线的ui带.h的为了方面名字取一样4.3添加曲线显示控件4.4 添加工具 5. 添加曲线.h文件内容6…

MySQL之单表查询

素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varchar(10) NO…

数据库结构文档生成(通过PDMReader)

将数据库的表结构生成数据库结构文档有三种方法&#xff1a; 1、通过 PDMReader生成文档&#xff1b; 2、使用EZDML 工具生成&#xff08;下载地址&#xff1a;EZDML - 下载&#xff09;&#xff1b; 3、使用SCREW 插件&#xff0c;通过java代码生成。 本文章先介绍通过PDM…

Python入门0基础学习笔记

1.编程之前 在编写代码之前&#xff0c;还有两件事需要做&#xff1a; 安装 Python 解释器&#xff1a;计算机是没法直接读懂 Python 代码的&#xff0c;需要一个解释器作为中间的翻译&#xff0c;把代码转换成字节码之后再执行。 Python 是翻译一行执行一行。一般说的安装 …