计算机工具基础(七)——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选项显式推送所有标签。

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

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

相关文章

uniapp动态循环表单校验失败:初始值校验

问题现象 &#x1f4a5; 在实现动态增减的单价输入表单时&#xff08;基于uv-form组件&#xff09;&#xff0c;遇到以下诡异现象&#xff1a; <uv-input>的v-model绑定初始值为数字类型时&#xff0c;required规则失效 ❌数字类型与字符串类型校验表现不一致 &#x1…

前端框架学习路径与注意事项

学习前端框架是一个系统化的过程&#xff0c;需要结合理论、实践和工具链的综合掌握。以下是学习路径的关键方面和注意事项&#xff1a; 一、学习路径的核心方面 1. 基础概念与核心思想 组件化开发&#xff1a;理解组件的作用&#xff08;复用性、隔离性&#xff09;、组件通信…

【Python机器学习】3.5. 决策树实战:基于Iris数据集

喜欢的话别忘了点赞、收藏加关注哦&#xff08;关注即可查看全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 本文紧承 3.1. 决策树理论(基础) 和 3.2. 决策树理论(进阶)&#xff0c;没看过的建议先看理论分…

Unity2022发布Webgl2微信小游戏部分真机黑屏

复现规律&#xff1a; Unity PlayerSetting中取消勾选ShowSplashScreen 分析&#xff1a; 在Unity中&#xff0c;Splash Screen&#xff08;启动画面&#xff09; 不仅是视觉上的加载动画&#xff0c;还承担了关键的引擎初始化、资源预加载和渲染环境准备等底层逻辑。禁用后导…

docker desktop 集成WSL Ubuntu22.04

Windows docker desktop 设置WSL ubuntu 22.04启用与其他发行版的集成 Windows docker desktop 安装参考 wsl ubuntu 22.04 查看我宿主机的docker desktop 容器全部的信息 wsl -d Ubuntu-22.04 -u root

快速入手-基于Django的主子表间操作mysql(五)

1、如果该表中存在外键&#xff0c;结合实际业务情况&#xff0c;那可以这么写&#xff1a; 2、针对特殊的字典类型&#xff0c;可以这么定义 3、获取元组中的字典值和子表中的value值方法 4、对应的前端页面写法

使用cursor开发java案例——springboot整合elasticsearch

安装elasticsearch 打开cursor&#xff0c;输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip&#xff1a;192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 &#xff0…

Deepseek结合企业数据挖掘平台能够给企业提升哪些效益?

Deepseek&#xff08;深度求索&#xff09;作为智能系统&#xff0c;在政务办公领域可通过AI技术优化流程、提升效率&#xff0c;具体应用场景分析如下&#xff1a; 1. 智能公文处理与流转 自动分类与审核 利用NLP解析公文内容&#xff0c;自动分类&#xff08;如请示、报告、通…

vite中sass警告JS API过期

在Vite创建项目中引入Sass弹出The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 vite中sass警告JS API过期 The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 警告提示表明你当前正在使用的 Dart Sass 版本中&#xff0c;旧的…

jenkins+1panel面板java运行环境自动化部署java项目

本文章不包含1panel面板安装、jenkins部署、jenkins连接git服务器等操作教程&#xff0c;如有需要可以抽空后期补上 jenkins安装插件Publish Over SSH 在系统配置添加服务器 查看项目的工作空间 项目Configure->构Post Steps选择Send files or execute commands over SSH…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能📚页面效果📚指令输入�…

SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题

文章引用&#xff1a;https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值&#xff0c;访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…

SpringBoot 统一功能处理

目录 1. 拦截器 1.1 什么是拦截器 1.2 定义拦截器 1.3 注册拦截器 1.3.1 拦截路径 1.4 登录校验 - 拦截器 1.4.1 定义拦截器 1.4.2 注册拦截器 1.4.3 前端代码 1.5 DisPatchServlet 底层源码解析 2. 统一结果返回格式 2.1 ResponseBodyAdvice 2.1.1 存在问题1 - 原本…

电机控制常见面试问题(十八)

文章目录 一.电机控制高级拓扑结构1.LLC 二.谈谈电压器饱和后果三.电压器绕组连接方式的影响四.有源逆变的条件 一.电机控制高级拓扑结构 1.LLC LLC是什么&#xff1f;—— 一个会"变魔术"的电源盒子 想象你有一个魔法盒子&#xff0c;能把电池的电压变大或变小&…

如何解决用户名文件夹是中文导致的识别不到路径,获取不到ssh密匙

如果你不想更改你的文件夹用户名导致之前配置的环境变量及相关软件失效&#xff0c;那么只需要指定自定义路径生成密钥 完整解决方案 1. 设置一个简单的 HOME 路径 由于你的用户名包含中文字符&#xff0c;导致默认路径 无法正确解析。我们可以通过修改 HOME 环境变量&#…

Python入门基础

python基础类型转换 str()与int()类型转换 name 张三 age 20 print(type(name),type(age))print(我叫name 今年&#xff0c; str(age)岁 )a10 b198.8 cFalse print(type(a),type(b),type(c)) print(str(a),str(b),str(c))s1 128 f198.7 s276.77 ffTrue s3hello print(type(s…

GithubPages+自定义域名+Cloudfare加速+浏览器收录(2025最新排坑)

前言 最近刷到一个小视频&#xff0c;讲述了选择域名选择的三宗罪&#xff0c;分别是 不要使用 .net&#xff0c;因为它价格贵&#xff0c;但是在顶级域名中的 SEO 效果却不是很好&#xff0c;也就是性价比很低不要使用 .cn&#xff0c;因为国外访问该网站可能会很慢&#xf…

监控IP,网站将异常情况通过飞书机器人发至指定群内

界面如下&#xff0c;丑是丑了点&#xff0c;但主打一个实用。 主要就是通过ping&#xff0c;就是一直在ping&#xff0c;当不通的时候&#xff0c;就根据你设置的报警时间&#xff0c;主要是利用飞书机器人来给飞书指定群里发异常信息报警。 直接上代码 import subprocess i…

2018扬州大学876农业机械学概论填空名词解释简答

2018 7.全喂入式脱粒机根据脱粒装置的工作特点&#xff0c;主要通过脱粒部件的结构与作用方式区分。其中&#xff0c;纹杆式脱粒装置依靠纹杆的击打、搓擦作用脱粒&#xff1b;弓齿式脱粒装置则通过弓齿的梳刷、打击实现脱粒。 8.主犁体作为犁具核心部件&#xff0c;各部分分…

C++KNN 算法应用痛点:从受噪声干扰到精准预测的突破

在机器学习算法家族中,K近邻(K-Nearest Neighbors,KNN)算法以其概念简单却又异常强大的特性脱颖而出。作为一名长期从事高性能计算优化的C++专家,我始终对KNN算法情有独钟。为何如此?想象一下,在数十种复杂的算法中,有一种算法能够不需要繁琐的数学推导,仅凭直觉就能理…