Git 速查表:中级用户必备的 12 个 Git 命令

news2024/11/25 12:45:35

本文译自:Git Cheat Sheet: 12 Essential Git Commands For Intermediate Users,原文链接:https://initialcommit.com/blog/git-cheat-sheet-intermediate

本系列共有三篇文章,本文是第二篇:

  • Git Cheat Sheet: 12 Essential Git Commands For Beginners
  • Git Cheat Sheet: 12 Essential Git Commands For Intermediate Users(本文)
  • Git Cheat Sheet: 14 Essential Git Commands For Experts

在之前的文章中,我们讨论了一些初学者必备的 Git 命令。然而,这些命令仅仅触及了 Git 功能的皮毛。

在本篇文章中,我们将介绍中级用户必备的 12 个 Git 命令。

git config

git config 命令用于设置 Git 配置。使用这个命令,用户可以在三个不同级别设置配置:

  • 本地级别:在特定的 Git 仓库中(存储在项目根目录的 .git/config 文件中)。
  • 全局级别:针对操作系统中的当前用户。
  • 系统级别:针对操作系统中的所有用户。

默认情况下,git config 命令会更改本地级别的设置。此命令可用于设置诸如 Git 用户名、电子邮件地址、默认文本编辑器(如 Vim)、默认合并行为、终端输出外观和别名等信息。

例如,可以使用以下命令设置当前用户的名称和电子邮件:

git config --global user.name "Your Name"
git config --global user.email "name@example.com"

可以使用以下命令将 Git 的默认文本编辑器设置为 Vim:

git config --global core.editor "vim"

列出所有当前 Git 的配置:

git config --list --show-origin

git mv

git mv 命令用于在 Git 仓库中移动和/或重命名文件。该命令会在工作目录中移动文件,并更新 Git 索引中旧文件路径和新文件路径。

git mv path/to/old_file_name.ext path/to/new_file_name.ext

需要注意的是,文件在您的文件系统中也会被重命名/移动,所以这个命令一举两得。然而,旧文件的历史记录都被 Git 跟踪了,所以如果您发现需要旧版本,可以随时找回。

git rm

git rm 命令用于从 Git 仓库中删除文件。它会在工作目录中删除文件,并从 Git 索引中移除文件。

要删除特定文件:

git rm path/to/filename.ext

需要注意的是,此命令会从您的文件系统中删除文件。然而,已删除文件的历史记录仍被 Git 跟踪,所以如果您后来发现需要它,可以随时找回。

git diff

git diff 命令用于显示提交、分支以及其他代码状态之间的差异。默认情况下,git diff 显示工作树与暂存区之间的差异。

该命令还可用于比较分支之间的差异:

git diff branch1 branch2

或者用于比较两个提交之间的差异:

git diff commitID1 commitID2

为了比较一个特定文件,也可以加上第三个文件名参数:

git diff commitID1 commitID2 file_to_compare.ext

git reset

git reset 命令用于将分支恢复到先前的状态。当给出提交、分支或其他引用时,该命令将分支和 HEAD 引用移动到指向该引用的位置。如果未提供引用参数,则默认将引用指向 HEAD。

该命令提供了三种操作模式:soft, mixed,和 hard。使用 soft 选项时,索引会被更新,但暂存的提交和工作目录保持不变。使用 mixed 选项(默认选项)时,索引将被重置,已暂存的更改将被移回工作目录。使用 hard 选项时,索引和工作目录都会被重置,所有更改都将丢失。

要将暂存区重置为与最近的提交匹配,而不丢失工作区的任何数据,请使用以下命令:

git reset

撤销所有当前的更改并将工作区重置为与最近的提交匹配,请使用以下命令:

git reset --hard

git tag

git tag 命令用于创建一个人类可读的标签(例如版本号),用于引用存储库中特定的提交。标签在本质上是一个引用,类似于分支名称,但标签通常是静态的,因为它们指向单个提交,而分支名称是动态的,因为它们跟踪分支的末端,并随着新的提交添加而更新。通常情况下,标签在标记发布版本时很有用。

为当前签出的 Git 提交创建一个标记:

git tag tag_name

git rebase

Git rebase 命令允许用户将一系列提交移动到一个新的基础提交上。如果用户提供了一个引用参数,则该分支将在该分支上进行 rebase。否则,默认情况下,该分支将在远程分支上进行 rebase。

git rebase origin

通过在 rebase 命令中添加 -i 选项,用户可以执行交互式 rebase。在交互式 rebase 中,用户还可以组合、拆分、重新排序、删除和编辑提交记录。

git cherry-pick

git cherry-pick 命令接受一个或多个提交记录,并将它们应用到一个现有的分支上。该命令提供了一种快速将提交记录添加到多个分支的方式,而无需执行 rebase 操作。

要将单个提交记录选取并应用到当前分支上,可以执行以下操作:

git cherry-pick commitID

用户也可以选取一系列提交记录并将它们应用到分支上。默认情况下,cherry-pick 不包含第一个提交记录,但会包含最后一个提交记录。

git cherry-pick oldest_commit...newest_commit

要让 cherry-pick 命令包含第一个和最后一个提交记录,可以将命令更新如下:

git cherry-pick oldest_commit^...newest_commit

git bisect

git bisect 命令用于通过对提交历史记录进行二分查找来分离出特定的提交记录。该命令在帮助我们找出是哪个提交引入了 bug 时非常有用。

要运行这个命令,需要先找到一个问题未发生的过去提交记录,这里称之为 “good_commit_id”。然后在最近的分支上运行以下命令:

git bisect start
git bisect bad
git bisect good good_commit_id

Git 会对提交记录进行二分查找,它会检查当前提交和上一个好的提交之间的提交记录。此时,开发人员需要检查或测试代码,以确定 bug 是否仍然存在。如果 bug 仍然存在,则运行 git bisect bad 命令;如果 bug 不存在,则运行 git bisect good 命令。

一旦找到了引入 bug 的提交记录,搜索就会返回第一个坏的提交记录的 commit ID。从这里开始,用户可以检查引入 bug 的提交记录。然后可以使用 git bisect reset 命令将分支恢复到执行搜索之前的状态。

这为开发人员快速追踪 bug 的源头提供了一种方法,因为每次将提交历史记录分成两半,可以指数级地减少需要手动检查的提交记录数量。

git revert

git revert 命令用于撤消之前提交的更改。该命令接受一个 commit ID,然后在当前分支上创建一个新的提交记录,以反转 revert 提交记录中的更改。这种方法允许用户撤消一个更改,而无需重写历史记录。执行该命令将在分支的末尾产生一个新的提交记录,用于撤消 revert 的提交记录中的更改。

git revert commitID

git fetch

git fetch 命令用于从远程仓库下载引用(包括标签和分支)。它会下载新创建的引用,并完成本地已存储引用的历史记录。与 git pull 不同,git fetch 命令不会更新本地仓库的工作状态,也不会执行合并操作。默认情况下,git fetch 命令会获取当前仓库的所有引用。

要从远程仓库获取所有引用,请使用以下命令:

git fetch origin

要从特定分支获取引用,请使用以下命令:

git fetch origin branch_name

git blame

通过 git blame 命令,用户可以查看文件中每一行最后一次修改的时间以及进行修改的责任人。该工具对于理解文件的历史记录非常有用,可以帮助用户确定在代码更改方面应该向谁寻求问题或建议。

要查看特定文件的此信息,请使用以下命令:

git blame path/to/filename.ext

总结

虽然在使用 Git 的最基本级别时不需要这些中级命令,但它们可以帮助用户提高使用 Git 的效率。它们提供了一组强大的功能,可以帮助您成为一个全面发展的开发者,这通常意味着能够以创造性的方式解决问题。

欢迎关注

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

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

相关文章

了解 HarmonyOS

引言 在开始 HarmonyOS 开发之前,了解其背景、特点和架构是非常重要的。本章将为你提供一个全面的 HarmonyOS 概览。 目录 什么是 HarmonyOS HarmonyOS 的发展历程 HarmonyOS 的特点 HarmonyOS 的架构 HarmonyOS 与其他操作系统的比较 1. 什么是 HarmonyOS …

如何在WSL上导入任何Linux发行版

文章目录 一、准备1. 开启WSL相关功能2. 升级WSL3. 设置默认的wsl版本 二、通过 Microsoft Store 安装 Linux1. 查看 Microsoft Store 有哪些可安装的 Linux 发行版2. 安装 Linux 发行版3. 查看已安装的 Linux 发行版4. 启动Linux发行版 三、通过Linux发行商提供的tar文件安装1…

[PyTorch][chapter 53][Auto Encoder 实战]

前言: 结合手写数字识别的例子,实现以下AutoEncoder ae.py: 实现autoEncoder 网络 main.py: 加载手写数字数据集,以及训练,验证,测试网络。 左图:原图像 右图:重构图像 ----main----- 每轮训…

DHCP 服务器部署

| DHCP - - > Dynamic Host Configuration Protocol 动态主机配置协议 背景 任何一个需要上网的设备,都必须得有IP地址,子网掩码,网关,等等网络参数。比如:手机,电脑,智能手表&#xff0c…

【SpringBoot学习笔记】02.静态资源与首页订制

静态资源 Spring Boot 通过 MVC 的自动配置类 WebMvcAutoConfiguration 为这些 WebJars 前端资源提供了默认映射规则,部分源码如下。 jar包: JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,…

IDEA 报 Cannot resolve symbol ‘HttpServletResponse‘ 解决

springboot2版本换成springboot3之后,代码这里突然报红了, 首先要淡定,把原先Import的引入删掉,重新引入试试呢,是不是很简单哈哈。 原来,springboot3的路径是: import jakarta.servlet.http…

Docker之私有仓库 RegistryHarbor

目录 一、Docker私有仓库(Registry) 1.1 Registry的介绍 二、搭建本地私有仓库 2.1首先下载 registry 镜像 2.2在 daemon.json 文件中添加私有镜像仓库地址 2.3运行 registry 容器 2.4Docker容器的重启策略 2.5为镜像打标签 2.6上传到私有仓库 2…

【车载雷达信号处理】利用sinc函数实现扣点

针对信号处理流程中多次FFT输出的频谱结果,在特殊的场景下,可能存在针对某一特定频点的固定"虚警",所以针对某一个特定频点进行“扣点”的操作是常有的信号处理流程需求。不仅如此,针对最大能量值的扣点也能在不适合使用…

文件修改时间能改吗?怎么改?

文件修改时间能改吗?怎么改?修改时间是每个电脑文件具备的一个属性,它代表了这个电脑文件最后一次的修改时间,是电脑系统自动赋予文件的,相信大家都应该知道。我们右击鼠标某个文件,然后点击弹出菜单里面的…

并发编程(四大函数接口) 06 详细讲解

四大函数接口 函数接口:接口中只有一个方法 Function Function函数型接口,有一个输入参数,有一个输出只要是函数型接口可以用Lambda表达式简化 函数函数型接口,有一个输入参数,有一个输出只要是函数型接口可以用lamb…

并发容器11

一 JDK 提供的并发容器总结 JDK 提供的这些容器大部分在 java.util.concurrent 包中。 ConcurrentHashMap: 线程安全的 HashMap CopyOnWriteArrayList: 线程安全的 List,在读多写少的场合性能非常好,远远好于 Vector. ConcurrentLinkedQueue: 高效的并…

element 级联选择框偏移

如图所示,选择之后,位置跑到了左上角 添加:append-to-body"false",在弹出框的定位出现问题时,可将该属性设置为 false

(第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第六天)初识Spring框架 ​ 昨天我们已经把Mybatis框架的基本知识全部学完,内容有Mybatis是一个半自动化的持久层ORM框架,深入学习编写动态SQL&a…

淘宝京东1688商品价格监控(电商价格监测API接口系列)

淘宝价格监控,电商价格监测软件目前市面有一款是最火的,针对各个平台都可以进行价格监测,很多实用功能,今天我们就来介绍一下品牌卫士这款价格24小时监测软件都有哪些功能。 一,覆盖全网全平台 天猫淘宝、闲鱼、京东、…

RK3588平台驱动调试篇 [ GPIO篇 ] - RK3588-对GPIO的操作控制

1. 简介 RK3588从入门到精通本⽂介绍Linux操作gpio⽅法开发板:ArmSoM-W3 2. GPIO配置 Rockchip Pin的ID按照 控制器(bank)端口(port)索引序号(pin) 组成 2.1 GPIO驱动介绍 驱动包括Pinctrl驱动( drivers/pinctrl/pinctrl-rockchip.c ) 和…

servlet初体验之环境搭建!!!

我们需要用到tomcat服务器,咩有下载的小伙伴看过来:如何正确下载tomcat???_明天更新的博客-CSDN博客 1. 创建普通的Java项目,并在项目中创建libs目录存放第三方的jar包。 建立普通项目 创建libs目录存放第三…

2023_Spark_实验三:基于IDEA开发Scala例子

一、创建一个空项目&#xff0c;作为整个项目的基本框架 二、创建SparkStudy模块&#xff0c;用于学习基本的Spark基础 三、创建项目结构 1、在SparkStudy模块下的pom.xml文件中加入对应的依赖&#xff0c;并等待依赖包下载完毕。 在pom.xml文件中加入对应的依赖 ​<!-- S…

模拟4~20ma电流输出的设计

文章目录 1. 原理2. 使用GP8102S或GP8212S进行设计2.1 共地型设计2.2 共源型设计2.3 其它电流需求 3. 隔离光耦电源连接方案4. 利用GP8102S实现0-40V 的可编程电压输出 1. 原理 4 ~ 20ma电流输出的目的不用多说&#xff0c;今天就简单聊一下4 ~ 20ma电流输出是怎么设计出来的&…

【AI】数学基础——概率论

随着联结主义学派的兴起&#xff0c;概率统计已经取代了数理逻辑&#xff0c;成为了人工智能研究的主流工具 数理统计的关注点是 无处不在的可能性 对随机事件发生的可能性进行规范的数学描述是概率论的公理化过程 频率学派认为先验分布式固定的&#xff0c;模型参数靠最大似…