当前位置: 首页 > article >正文

计算机工具基础(七)——Git

Git

本系列博客为《Missing in CS Class(2020)》课程笔记

Git是一种分布式版本控制系统,被其跟踪的文件可被查询精细到行的修改记录、回退版本、建立分支等

模型

一般流程:工作区 → \to 暂存区 → \to 仓库(本地 → \to 远端)

  • 工作区:项目的工作台,用户在此处直接编辑文件

  • 暂存区(索引):用于暂存准备提交至本地仓库的文件,Git只跟踪暂存区内的文件

    • git ls-files:查看暂存区
  • 仓库:存储版本历史的版本库,分为本地仓库与远端仓库。

    • git init:将此目录初始化为本地仓库(位于.git下)
    • git status:查看该仓库中文件状态,包括修改、新增、删除、未跟踪等信息

配置

  • 为标识提交者,需通过配置进行标识
  • 用户名配置:git config --global user.name ["name"]
  • 邮箱配置:git config --global user.email ["email"]
  • global选项代表对所有仓库有效
  • git的配置可在.gitconfig文件中找到

文件状态

未跟踪态

  • 未跟踪:该文件未被Git跟踪,即其仅存在于工作区中,不在暂存区或仓库中

    • git add [Name]:将文件或文件夹添加至暂存区(支持使用通配符)
      选项-p:交互式添加文件
  • 将未在仓库中的文件/文件夹名添加至.gitignore中,即可忽略Git对其一切管理(注意文件夹以/结尾)

已跟踪态

  • 未修改:该文件相较于当前版本仓库无任何修改
  • 已修改:该文件在工作区已修改,但修改还未被添加至暂存区
    • git stash:临时保存工作区更改
    • git blame [Name]:查看文件历史修改
  • 已暂存:文件已准备提交至本地仓库

文件删除

  • git rm --cached [Name]:在暂存区删除文件(工作区不删除)
  • git rm -f [Name]:同时在暂存区和工作区删除文件

提交、标签

提交

  • 提交(Commit):将暂存区文件提交至本地仓库,并产生一个新版本,每个版本通过唯一的16进制字符串标识。

  • HEAD指针:永远指向当前操作版本,随新提交而自动更新(相当于链表的头节点)。

    • git reflog:查看HEAD指针变动历史。
  • 访问提交:

    • 直接使用16进制字符串访问提交。
    • 通过HEAD指针访问:HEAD~[num]HEAD^[num],代表HEAD之前的第num个版本,若num为1可省略。
  • git commit -m ["Reason"]:将暂存区中的文件提交至本地仓库,提交原因必填。若省略["Reason"],则调用默认编辑器填写提交原因。
    选项:-a将所有文件添加至暂存区并提交

  • git log:查看提交历史、当前HEAD指针位置
    选项:--oneline每个提交只输出一行
    --graph以ASCII图显示提交历史

  • git checkout [Commit]:将HEAD指针指向特定提交,将发生头指针分离。

  • 头指针分离:HEAD指针被指向某一版本,而非该分支最新版本,此状态被称为头指针分离。该状态下只能查看历史记录,而不能进行分支操作。进入头指针分离应当为临时操作,否则可能会丢失信息。

标签

  • git tag -a [TagName] [Commit]:为版本打标签。若[Commit]省略,则给HEAD打标签。
  • git tag -d [TagName]:在本地删除标签。

回退

回退提交

  • git reset [--mode] [Commit]:将HEAD指针回退至指定版本,mode为指定的回退模式:
    • mixed:回退仓库与暂存区,工作区不变(当mode省略时的默认选项)。

    • soft:仅回退仓库,工作区和暂存区不变。

    • hard:同时回退仓库、工作区和暂存区。(慎用!)

回退文件/文件夹

  • git reset [Commit] -- [Name]:将某一文件回退至指定版本
  • git checkout -- [Name]:从暂存区恢复该文件到工作区
  • git checkout [Commit] -- [Name]:从特定提交中恢复该文件
  • git restore [Options] [Name]:更清晰的恢复文件(推荐替代git checkout)
    • 选项:--source=[Commit]/-s [Commit]从指定提交中恢复内容(默认为HEAD)
    • --staged/-S:将暂存区的内容恢复至工作区
    • --ours:当合并冲突时,恢复为当前分支的版本
    • --theirs:当合并冲突时,恢复为另一分支的版本

差异对比

  • git diff:工作区与暂存区间差异。
  • git diff HEAD:工作区与最新版本间差异。
  • git diff --cached:查看暂存区与最新版本差异。
  • git diff [ID1] [ID2]:比较两个版本间差异。
  • git diff [Name] [Name]:比较两个分支间差异。

分支

分支(Branch):每个分支都是独立的,拥有独立的分支指针(指向该分支的最新版本)、工作区、暂存区、本地仓库等。分为本地分支与远程分支。

当本地仓库被初始化时,默认仅具有一个main分支。

分支的创建、重命名、删除

  • git branch:查看所有分支,当前所在分支会被以*标识。
    • q-r:查看远程分支
    • -a:查看所有分支
  • git branch [Branch]:创建分支(但不切换)
  • git branch -m [OldName] [NewName]:重命名分支
  • git branch -m [Newname]:重命名当前分支。使用-M选项强制重命名。
  • git branch -d [Branch]:删除已合并的分支[Branch],使用-D选项进行强制删除(无论是否合并)

切换分支

git checkout
  • git checkout [Branch]HEAD指针切换至该分支的最新提交。
    • git checkout -:切换至前一个分支
  • git checkout -b [Branch]:创建并切换至该分支
git switch
  • git switch [Branch]:更清晰地切换分支,避免产生歧义(推荐用于替代checkout)
  • git switch -c [Branch]:创建并切换至此分支

合并分支

  • git merge [Branch]:将分支[Branch]快速合并至当前分支,合并后会产生一次合并提交,提交图成环状结构。需手动处理解决冲突,使用git status查看冲突文件。
  • 合并冲突:当两个分支修改了同一文件的同一部分时,会造成冲突。>>>>>>HEAD下方为当前分支的代码,<<<<<<[Name]上方为[Name]分支的代码,======用于分隔两者。手动编辑处理冲突后使用git add添加至暂存区,使用git merge --continue继续合并分支。
  • git mergetool:使用工具解决合并冲突
  • git merge --abort:取消合并

分支的变基

  • git rebase [Branch]:求当前分支与目标分支的LCA(最近公共祖先)版本,将当前分支自LCA版本的下个版本起,全部移植至目标分支的分支指针上,HEAD指针不动。提交图仍为线性结构。
    image-20250324235116328

远端仓库

远程仓库的添加、重命名、删除

  • git remote:查看本地仓库的远端仓库列表。
    选项-v:查看远端仓库的URL
  • git remote add [RemoteName] [RemotePath]:在远端仓库列表中添加名为[RemoteName]、地址为[RemotePath]的远端仓库。[RemoteName]默认为origin[RemotePath]可为路径、URL等。
  • git remote show [RemoteName]:查看远端仓库详细信息
  • git remote rm [Remote_Name]:从远端仓库列表中删除该远端仓库
  • git remote rename [RemoteOldName] [RemoteNewName]:重命名远端仓库
  • git remote set-url [RemoteName] [RemoteNewPath]:更新远端仓库路径

设置上游分支

设置上游分支建立了本地分支与远程分支的联系。在执行git pullgit push前,必须设置上游分支,否则需在对应操作时候手动通过-u选项设置关联。

  • git branch -u [RemoteName]/[RemoteBranch] [LocalBranch]:将远程分支[RemoteName]/[RemoteBranch]设置为本地分支[LocalBranch]上游分支[LocalBranch]默认为当前分支。

克隆、拉取、推送

  • git clone [RemoteURL] [SaveName]:完整克隆远端仓库(包括所有分支及版本)
    选项:-b [Branch]仅克隆指定分支
    --depth=1仅克隆最新的版本(浅克隆)
  • git fetch [RemoteName]:拉取远端仓库最新版本,需使用git merge合并到工作区
  • git pull [RemoteName] [RemoteBranch]:拉取远端仓库最新版本,合并到本地当前分支工作区(相当于 git fetch + git merge)。若当前分支已设置上游分支,可直接运行 git pull,否则需使用-u选项关联远程分支。
  • git push [RemoteName] [LocalBranch]:[RemoteBranch]:将本地的分支版本上传到远端仓库并合并。若当前分支已设置上游分支,可直接运行 git push,否则需使用-u选项关联远程分支。使用--tags选项显式推送所有标签。

相关文章:

计算机工具基础(七)——Git

Git 本系列博客为《Missing in CS Class(2020)》课程笔记 Git是一种分布式版本控制系统&#xff0c;被其跟踪的文件可被查询精细到行的修改记录、回退版本、建立分支等 模型 一般流程&#xff1a;工作区 → \to →暂存区 → \to →仓库(本地 → \to →远端) 工作区&#xff1…...

鸿蒙开发:父组件如何调用子组件中的方法?

前言 本文基于Api13 很多的场景下&#xff0c;父组件需要触发子组件中的某个方法&#xff0c;来实现一些特定的逻辑&#xff0c;但是ArkUI是声明式UI&#xff0c;不能直接调用子组件中的方法&#xff0c;那么怎么去实现这个功能呢&#xff1f; 举一个很常见的案例&#xff0c;通…...

23种设计模式-创建型模式-工厂方法

文章目录 简介场景问题1. 直接依赖具体实现2. 违反开闭原则3. 条件分支泛滥4. 代码重复风险 解决根本问题完整类图完整代码说明核心优势代码优化静态配置表动态策略 总结 简介 工厂方法是一种创建型设计模式&#xff0c;它提供了在父类中创建对象的接口&#xff0c;但允许子类…...

142. 环形链表 II——考察数学,难!

142. 环形链表 IIhttps://leetcode.cn/problems/linked-list-cycle-ii/ 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,…...

C++常见问题与思考

TLS&#xff08;线程本地存储&#xff09;原理 线程本地存储&#xff08;Thread Local Storage&#xff0c;TLS&#xff09;是一种机制&#xff0c;它允许每个线程拥有自己独立的变量实例&#xff0c;这些变量的生命周期与线程相同。也就是说&#xff0c;不同线程对同一个 TLS…...

从零开始:使用Luatools工具高效烧录Air780EPM核心板项目的完整指南

本文将深入讲解如何使用Luatools工具烧录一个具体的项目到Air780EPM开发板中。如何使用官方推荐的Luatools工具&#xff08;一款跨平台、命令行驱动的烧录利器&#xff09;&#xff0c;通过“环境配置→硬件连接→参数设置→一键烧录”四大步骤&#xff0c;帮助用户实现Air780E…...

关于c++的几个简单算法

一. 动态规划&#xff08;Dynamic Programming&#xff09; 难点&#xff1a;状态转移方程的构建和初始化条件的设计 典型问题&#xff1a;01背包问题 分析&#xff1a; 状态定义 dp[i][j] 表示前i个物品放入容量为j的背包的最大价值。状态转移需要判断是否选择当前物品。 #i…...

WPF MergedDictionaries详解

在 WPF 中&#xff0c;ResourceDictionary.MergedDictionaries 是一个非常重要的特性&#xff0c;用于将多个资源字典&#xff08;ResourceDictionary&#xff09;合并到一个主资源字典中。这种机制使得资源的管理和复用变得更加灵活和高效。 1. MergedDictionaries 的作用 Me…...

一套云HIS系统源码,系统融合HIS与EMR,基于云端部署,采用B/S架构与SaaS模式

云HIS系统完全基于云端部署&#xff0c;采用B/S架构&#xff0c;并通过软件即服务&#xff08;SaaS&#xff09;的形式面向二级及以下医院可快速交付、便捷运维、云化的医院核心业务平台产品。融合医院HIS和EMR两大主营系统&#xff0c;构建涵盖患者、费用、医嘱、电子病历等核…...

DisplayPort(DP)详解

一、DisplayPort的定义与核心特性 DisplayPort&#xff08;DP&#xff09; 是由 视频电子标准协会&#xff08;VESA&#xff09; 制定的 高性能数字音视频接口&#xff0c;专为高分辨率显示器和多屏应用设计。其核心特性包括&#xff1a; 高带宽&#xff1a;DisplayPort 2.0支…...

C++数据结构(搜索二叉树)

1.二叉树搜索的概念 二叉搜索数也成为二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者是满足以下性质的树&#xff1a; 1.若他的左子树不为空&#xff0c;则左子树上的所有节点的值都小于等于根节点的值。 2.若他的右子树不为空&#xff0c;则右子树上的所有节点的值…...

OpenCV图像拼接(6)图像拼接模块的用于创建权重图函数createWeightMap()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::createWeightMap 是 OpenCV 库中用于图像拼接模块的一个函数&#xff0c;主要用于创建权重图。这个权重图在图像拼接过程中扮演着重…...

Micropython RPI-PICO 随记-双PICO串口传数据

开发环境 MCU&#xff1a;双 Pico1&#xff08;无wifi版&#xff09;&#xff0c;串口相连&#xff0c;需要共地使用固件&#xff1a;自编译版本开发环境&#xff1a;MacBook Pro Sonoma 14.5开发工具&#xff1a;Thonny 4.1.6开发语言&#xff1a;MicroPython 1.24.0 上位机…...

炫酷的HTML5粒子动画特效实现详解

炫酷的HTML5粒子动画特效实现详解 这里写目录标题 炫酷的HTML5粒子动画特效实现详解项目介绍技术栈项目架构1. HTML结构2. 样式设计 核心实现1. 粒子类设计2. 动画效果实现星空效果烟花效果雨滴效果 3. 鼠标交互 性能优化效果展示总结 项目介绍 本文将详细介绍如何使用HTML5 C…...

YoloV8训练和平精英人物检测模型

概述 和平精英人物检测&#xff0c;可以识别游戏中所有人物角色&#xff0c;并通过绘制框将人物选中&#xff0c;训练的模型仅仅具有识别功能&#xff0c;可以识别游戏中的视频、图片等文件&#xff0c;搭配Autox.js可以推理&#xff0c;实现实时绘制&#xff0c;但是对手机性…...

BC93 公务员面试

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言练习题分享 &#x1f30d;文章目入 #include <stdio.h> int main() {int score 0, max 0, min 100, sum 0, count 0; while (scanf("%d", &score) ! EOF){…...

3.0 Disruptor的使用介绍(一)

Disruptor: 其官网定义为&#xff1a;“A High Performance Inter-Thread Messaging Library”&#xff0c;即&#xff1a;线程间的高性能消息框架&#xff0c;与Labview的生产者、消费者模型很相似。 其组成部分比较多&#xff0c;先介绍几个常用的概念&#xff1a; …...

基础实验2-2.1 整数的分类处理

基础实验2-2.1 整数的分类处理 - 浙大版《数据结构学习与实验指导&#xff08;第2版&#xff09;》题目集 (pintia.cn) 给定 N 个正整数&#xff0c;要求你从中得到下列三种计算结果&#xff1a; A1 能被 3 整除的最大整数A2 存在整数 K 使之可以表示为 3K1 的整数的个数A3…...

[深度学习]图像分类项目-食物分类

图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…...

有价值的面试问题

迅雷一面 都是c和网络问题 了解epoll吗&#xff1f;解释下水平触发和边缘触发&#xff0c;医院的叫号系统应该算哪一种 c类a有成员b&#xff0c;成员b调用了a的函数&#xff0c;但是a不小心把b的成员删除了&#xff0c;会发生什么&#xff0c;怎么解决 c类a有一个static的函数…...

禁用ONLY_FULL_GROUP_BY模式

这是由于MySQL启用了ONLY_FULL_GROUP_BY模式导致的。以下是禁用该模式的三种方法&#xff0c;结合你的需求选择最合适的方案&#xff1a; 一、临时禁用&#xff08;重启后失效&#xff09; 1. 当前会话禁用 直接在SQL客户端执行以下命令&#xff0c;仅对当前数据库连接有效&…...

SAP 获取RFC的WSDL文件

主要是CPI要用到WSDL文件做mapping&#xff0c;客户的SAP服务器不一定直接可在浏览器访问http或者https的地址&#xff0c;所以在SAP里面开发程序内部调用地址获取WSDL文件 *&---------------------------------------------------------------------* *& Report YXX_…...

SQLite优化实践

1. 启用写入批处理 使用事务将多条插入操作包装在一起&#xff0c;这样可以减少磁盘I/O和日志的写入。 BEGIN TRANSACTION; -- 执行多个INSERT语句 COMMIT;通过将多个插入操作包装在一个事务中&#xff0c;可以显著减少每次写入数据库时的磁盘I/O操作。 2. 使用更大的页大小…...

56.fm解调最简单的方法过零检测,如何确定计时器的更新速率

&#xff0c;...

java8循环解压zip文件---实现Excel文件数据追加

java8循环追加Excel数据 实际遇到问题&#xff1a;定期获取zip文件&#xff0c;zip文件内有几个固定模板的Excel文件&#xff0c;有的Excel文件可能还包含多个sheet。 有段时间一次性获取到好几个zip包&#xff0c;需要将这些包都解压&#xff0c;并且按照不同的文件名、sheet进…...

基于SpringBoot的电影售票系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

SQL Server 2022 安装问题

一、安装与配置问题 1. SQL Server 2022 安装失败怎么办&#xff1f; 常见原因&#xff1a; 硬件或操作系统不满足最低要求&#xff08;如内存、磁盘空间不足&#xff09;。未关闭防火墙或杀毒软件。之前版本的 SQL Server 残留文件未清理。 解决方案&#xff1a; 确保硬件配…...

MySQL 8.0.41安装教程(附安装包)mysql8.0.41图文详细安装教程

文章目录 前言一、MySQL 8.0.41下载安装包二、MySQL 8.0.41安装教程1.启动安装程序2.选择安装模式3.选定安装组件4.确认安装设置5.执行安装操作6.安装进行中7.设置数据库密码8.继续点击下一步9.执行配置操作10.完成配置11. 再次点击下一步12.结束安装向导 三、MySQL 8.0.41配置…...

React Router使用方法

目录 简介React Router的三种使用模式声明模式数据模式框架模式 React Router7声明模式使用方法在入口文件引入BrowserRouter配置一个路由组件管理路由将路由组件引入App.tsx嵌套路由链接式路由导航 \ 和 \<Link>编程式路由导航 简介 React Router 是 React 的多策略路由…...

2025年陕西省各市秦创原产业创新聚集区(机器人、羊乳、苹果)“四链”融合项目申报补贴要求和时间流程

征集2025年陕西省各市秦创原产业创新聚集区&#xff08;机器人、羊乳、苹果&#xff09;“四链”融合项目申报补贴要求和时间流程&#xff0c;更多详情请大家参考下文&#xff01;西安市、宝鸡市、咸阳市、铜川市、渭南市、延安市、榆林市、汉中市、安康市、商洛市10市各地需要…...