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

news2025/3/26 6:27:59

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选项显式推送所有标签。

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

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

相关文章

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

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

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

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

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

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

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

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

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;主要用于创建权重图。这个权重图在图像拼接过程中扮演着重…

炫酷的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; …

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

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

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配置…

深入解析 C++20 中的 std::bind_front:高效函数绑定与参数前置

文章目录 1. 什么是 std::bind_front&#xff1f;2. 使用 std::bind_front2.1 基本用法2.2 绑定多个参数 3. 优势与特点3.1 简化代码3.2 支持可调用对象3.3 支持完美转发 4. 实际应用场景4.1 事件处理4.2 算法通用化4.3 成员函数调用 5. 总结 在现代 C 编程中&#xff0c;函数绑…

python裁剪nc文件数据

问题描述&#xff1a; 若干个nc文件储存全球的1850-2014年月尺度的mrro数据(或其他数据)&#xff0c;从1850-1到2014-12一共1980个月&#xff0c;要提取出最后35年1980.1~2014.12年也就是420个月的数据。 代码实现 def aaa(input_file,output_file,bianliang,start_index,en…

CSS网格布局Grid

目录 一、Grid 网格布局 1.Grid 布局基础 2.网格容器属性 3.网格项目属性 4.高级功能 5.典型应用场景 6.最佳实践 二、Flex和Grid对比 示例&#xff1a; 一、Grid 网格布局 CSS Grid 是一种强大的二维布局系统&#xff0c;能够以行和列的方式精确控制网页布局。它比传…

医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)

医院挂号预约小程序 目录 基于微信小程序的医院挂号预约系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、小程序用户端 2、系统服务端 &#xff08;1&#xff09; 用户管理 &#xff08;2&#xff09;医院管理 &#xff08;3&#xff09;医生管理 &#xf…