Git版本管理系列:(一)使用Git管理单分支

news2025/4/16 3:41:19

目录

  • 基础概念介绍
  • 仓库的创建
  • 创建隐藏目录
  • 添加代码到暂存区
  • 提交代码到仓库
  • 提交记录查询
  • 比较差异
  • 标签
  • 文件删除
  • 版本回退
  • 总结

Git‌ 是一个分布式版本控制系统(DVCS),用于跟踪文件的变更并协调多人协作开发‌,由 Linus Torvalds 于 2005 年创建。为什么要学习使用Git?因为软件开发中必不可少的是版本迭代以及团队协作,并且现在很多开源软件的下载也依赖于Git方法。因此,只要是个程序员就应该要掌握使用Git进行版本管理的方法,是绕不开必须学会的技能。

基础概念介绍

 预计Git系列一共出三篇文章,分别是单分支的使用、多分支,以及连接远程仓库。本篇文章是开篇,介绍Git在单分支版本管理中的基础使用方法帮助新手快速入门Git,更全面的指令介绍请参考官方的手册。
 Git是一个用来进行程序版本迭代管理的软件,什么叫版本管理?写程序的过程一般都是先写个初版,然后再不断地进行改进,如果没有Git那么就需要人为地进行手动管理,比如手动对之前版本的文件进行复制保存,如果要进行版本回退的话再手动去查找之前的存档,如果版本很多的话这个过程会很繁琐,复杂。Git的出现就是帮我们进行这个版本迭代的管理,并且能很轻松地和其他人一起进行同一个项目的开发。
在这里插入图片描述
 Git进行版本迭代与管理的工作流程如上图所示。简单来说就是先将本地工作区的文件(修改过的)添加进暂存区,再将暂存区的文件提交到仓库内。仓库里装着最终确定存储的代码。
 那为什么要有暂存区?直接把更改后的代码提交到仓库内不行吗?我们可以看到暂存区位于工作目录和本地仓库之间,起到了缓冲和筛选变更‌的作用‌。例如有时候我们代码只需要提交对某个文件的修改,而项目中的其他文件不需要更改,就可以选择性地将工作目录中的变更添加到暂存区中,再由暂存区提交到仓库。并且,暂存区是提交前的“准备区”,开发者可以在这里检查和管理即将提交的变更‌,提高安全性。总之,暂存区是git的一个机制,遵守就好了
 Git的使用就是围绕上图这个工作流开展的。

仓库的创建

 要对项目进行版本管理首先需要创建一个仓库,Git中创建仓库最常用的两种方法如下:

  1. git init即在项目的文件夹下打开git bash,并在其中输入这条指令。git 将创建一个本地仓库,工程目录下将生成一个.git隐藏文件夹注意,千万不要乱动隐藏文件夹
  2. git clone xxxx 这是从远程仓库克隆的指令,比如从github等网站上克隆开源项目。使用这条指令能一键将远程仓库的项目完完整整地下载到本地。

创建隐藏目录

 有时候项目文件夹下的有些文件并不需要进行同步管理,比如一些日志以及编译产生的中间文件等,这时候就需要对这些文件进行隐藏了,让它们不同步到代码仓库内。
 git中主要通过.gitignore文件来决定文件是否同步到仓库。

.gitignore 文件的基本语法‌
‌1. 忽略单个文件‌:直接写入文件名,例如 secret.txt‌
2‌. 忽略目录‌:在目录名后加上斜杠 /,例如 node_modules/‌
3‌. 忽略特定类型的文件‌:使用通配符 *,例如 *.log 会忽略所有 .log 文件‌。
‌4. 忽略特定路径下的文件‌:在规则前加上路径,例如/temp/*会忽略根目录下 temp 目录中的所有文件‌。
‌5. 否定规则‌:在规则前加上 ! 表示不忽略匹配的文件或目录,例如 !important.log‌

如果想把已经提交到仓库中的某个文件忽略,具体做法如下:

  1. 确认该文件在仓库中git ls-files 如果输出的有文件的名字就说明已经提交到仓库里了。
  2. 将要忽略的文件名添加进.gitignore文件中,并添加进缓存区git add .gitignore
  3. 使用git rm -r --cached <文件/目录路径>将需要忽略的文件/目录从缓存区删除。
  4. 提交缓存区代码。

添加代码到暂存区

git add .add后面加需要添加的目录文件名等,这里的.代表把所有更新了的文件提交到暂存区,也可以自行指定。

提交代码到仓库

git commit -m "本次更新的内容",-m意思是添加版本更新的备注,理论上可以不写,但一般情况下都需要写,就跟贴了条形码的答题卡上依然要手写姓名班级一样。

提交记录查询

git log即可查询提交记录。但git log 不能查看回退过的记录,其展示的是目前有效的版本迭代。如果要查询所有的提交记录(包括回退,以及其他分支的提交记录),请使用git reflog
 并且可以使用git log --name-only筛选出具体提交的文件名。

比较差异

git diff指令用来比较三个区之间的文件差异,包括文件的数目(宏观)以及具体到文件的内容(微观)。

  1. git diff默认比较工作区与暂存区之间的文件数目差异
  2. git diff -- 文件1 文件2 文件n用来具体比较工作区与暂存区之间,这几个文件的内容差异
  3. git diff <版本哈希值>用来比较工作区与指定版本之间的差异。
  4. git diff <版本哈希值> -- 文件1 文件2用来比较工作区与指定版本之间这几个文件的内容差异。

标签

 代码每一次提交都意味着做出了新的修改,这是量变的过程。量变产生质变,标签就是用来标记程序开发质变的节点的版本别名。在git中常用标签来用附注标记程序的稳定版本。标签的命名遵循语义化版本(如 v<主版本>.<次版本>.<修订号>)‌。

  1. 添加标签
     标签分为轻量标签以及附注标签、并且也可以基于当前提交或者历史提交。
    • 轻量标签添加:git tag <tagname> ,这种添加方式是基于当前提交的,如果要基于某个版本需要在后面添加上提交记录,例如:
      git tag v0.9 abc1234 ,abc1234是提交记录,使用git log 或者git reflog查看。轻量标签仅作为提交的指针,不存储额外信息‌。

    • 附注标签添加:git tag-a <tagname> -m <message>,例如git tag -a v1.0.0 -m "Release version 1.0.0",附注标签包含作者、日期和描述信息,适合正式版本‌。

  2. 删除标签
    git tag -d <tagname>这是删除本地的标签,git push origin --delete <tag_name>用于删除远程库内的标签。
  3. 查看标签
    列出所有标签:git tag
    查看标签详情:git show <tagname>

常用的操作就是这些,详细内容推荐一篇博客。

文件删除

 删除文件最常用的是bash指令中的rm指令,一般有rm -rf 文件/目录 ,f表示直接删除,r表示删除目录(默认rm只能删文件,需要加-r递归删目录)。git也有删除命令git rm ,主要是可以删除缓存区以及仓库内的文件和目录,bash指令只能用在工作区。
git rm <filename>:删除工作区与暂存区的文件(相当于rm加add操作,版本库中删除就直接提交删过的暂存区就好了)。
git rm --cached <filename>删除暂存区的某个文件,常用于把已经提交到仓库中的某个文件忽略,即错误地将某个文件添加到了暂存区,希望将其从版本控制中移除,但仍然保留在本地工作区中。

版本回退

 版本回退主要使用git reset命令,回退的主要原理是修改HEAD指针的位置(HEAD指针默认指向当前工作的仓库版本)回退版本后的版本都会清除
 回退分三种:第一种hard,即强硬的回退,除了仓库版本会回退,工作区与暂存区的内容也会回退(即当前工作区的内容也会被还原到指定版本)。第二种soft,软回退,就把当前的仓库版本回退到指定版本,工作区与暂存区内容不变。第三种mixed(默认),即把仓库版本以及暂存区都进行回退,工作区内容保存。

  1. git reset --hard <指定版本哈希值>
  2. git reset --soft <指定版本哈希值>
  3. git reset --mixed <指定版本哈希值>

版本哈希值也可以使用HEAD^来指代上个版本,HEAD^^来指代上上个版本。另外还有撤销回退的操作:
git checkout -- <filename>该命令会将指定文件(filename)恢复到最近一次 git commit 或 git add 时的状态,丢弃工作区对该文件的所有未暂存修改。例如:
git checkout HEAD^ -- filename 恢复到上一次提交的版本‌
git checkout branchname -- filename 恢复为指定分支的版本‌

总结

 本章涉及单分支下版本管理的各类简单操作基本覆盖百分之八十以上的使用场景。不要把git学习当成理论学习,权当查字典学习就好了,必须要不断实践才可能掌握的。附涉及命令总结:

git init #初始化仓库
git clone <url> #从远程仓库初始化本地仓库
git add . #提交所有文件到暂存区
git commit -m "message" #把暂存区文件提交到仓库

git tag #查看所有标签
git show <tagname> #查看某一标签详情
git tag <tagname> #为当前版本打上标签
git tag <tagname> <版本哈希> #为指定版本打上标签
git tag -a <tagname> -m "tag_message" <版本哈希> #为指定版本打上附注标签
git tag -d <tagname> #删除指定标签

git log #查看提交记录
git log --name-only#筛选提交记录名称
git reflog #查看所有更改记录

git diff #比较工作区和暂存区的文件数目差异
git diff -- filename1 filename2 #比较工作区和暂存区指定文件内容差异
git diff <版本哈希值> #比较工作区与指定版本文件数目差异
git diff <版本哈希值> -- filename1 filename2 #比较工作区与指定版本文件内容差异

git rm -rf files/folders #从工作区和缓存区删除文件或者文件夹
git rm --cached #删除暂存区内容
git rm --cached <filename> #删除暂存区文件

git reset --hard <版本哈希值> #硬回退到指定版本,工作区暂存区都回退
git reset --soft <版本哈希值> #软回退,只有仓库回退
git reset --mixed <版本哈希值> #默认回退,仓库和暂存区回退
git checkout --filename #将文件恢复到最近一次commit版本
git checkout HEAD^ -- filename #恢复到上一次提交的版本‌
git checkout branchname -- filename #恢复为指定分支的版本‌

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

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

相关文章

mapbox基础,加载ESRI OpenStreetMap开放街景标准风格矢量图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀加载ESRI OpenStreetMap开放街景标准风…

WGAN-GP 原理及实现(pytorch版)

WGAN-GP 原理及实现 一、WGAN-GP 原理1.1 WGAN-GP 核心原理1.2 WGAN-GP 实现步骤1.3 总结 二、WGAN-GP 实现2.1 导包2.2 数据加载和处理2.3 构建生成器2.4 构建判别器2.5 训练和保存模型2.6 图片转GIF 一、WGAN-GP 原理 Wasserstein GAN with Gradient Penalty (WGAN-GP) 是对…

IntelliJ IDEA使用技巧(json字符串格式化)

文章目录 一、IDEA自动格式化json字符串二、配置/查找格式化快捷键 本文主要讲述idea中怎么将json字符串转换为JSON格式的内容并且有层级结构。 效果&#xff1a; 转换前&#xff1a; 转换后&#xff1a; 一、IDEA自动格式化json字符串 步骤一&#xff1a;首先创建一个临…

SvelteKit 最新中文文档教程(18)—— 浅层路由和 Packaging

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …

集成nacos2.2.1出现的错误汇总

总结 1.jdk问题 jdk要一致 2.idea使用问题 idea启动nacos要配置&#xff0c;idea启动类要启动两次&#xff0c;并配置两次vm参数 3.项目依赖问题 依赖要正确添加&#xff0c;有的模块就是不能用公共模块的pom配置&#xff0c;需要独立配置&#xff0c;先后启动顺序也要注意…

LabVIEW 开发如何降本增效

在 LabVIEW 开发领域&#xff0c;如何在确保项目质量的同时降低开发成本&#xff0c;是众多企业和开发者共同关注的焦点。这不仅关乎资源的高效利用&#xff0c;更影响项目的投资回报率和市场竞争力。下面&#xff0c;我们将从多个维度深入剖析降本策略&#xff0c;并结合具体案…

Tomcat 负载均衡

目录 二、Tomcat Web Server 2.1 Tomcat 部署 2.1.1 Tomcat 介绍 2.1.2 Tomcat 安装 2.2 Tomcat 服务管理 2.2.1 Tomcat 启停 2.2.2 目录说明 2.2.3编辑主页 2.3 Tomcat管理控制台 2.3.1开启远程管理 2.3.2 配置远程管理密码 三、负载均衡 3.1 重新编译Nginx 3.1.1 确…

4月8日日记

今天抖音刷到一个视频 记了一下笔记 想做自媒体&#xff0c;直播&#xff0c;抖音是最大的平台&#xff0c;但是我的号之前因为跟人互喷被封号了 今天想把实名认证转移到新号上&#xff0c;试了一下竟然这次成功了&#xff0c;本以为能开直播了但是 还是因为之前的号有违规记…

【JavaScript】十六、事件捕获和事件冒泡

文章目录 1、事件流2、事件捕获3、事件捕获4、阻止冒泡5、解绑事件6、鼠标经过事件的区别7、两种事件注册语法的区别 1、事件流 先举个形象的例子&#xff1a;你去西安大雁塔旅游 出发找目的地时&#xff1a;先从你家出发&#xff0c;到陕西省西安市&#xff0c;再到雁塔区&a…

基于 Spring Boot 瑞吉外卖系统开发(一)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;一&#xff09; 系统概述 系统功能 技术选型 初始项目和数据准备 初始项目和SQL文件下载 创建数据库并导入数据 打开reggie项目 运行效果 主函数启动项目&#xff0c;访问URL&#xff1a; http://127.0.0.1:8080/backend/pag…

WordPress超简洁的主题:果果CMS主题

果果CMS是基于WordPress开发的超精简的一款主题&#xff0c;它在原有的特性上添加了许多新特性&#xff0c;例如&#xff1a;随机文章、随机标签、随机分类、广告、友情链接等。 新版特性&#xff1a; 小&#xff1a;主题安装包文件大小只有140.48KB。少&#xff1a;主题最小…

leetcode13.罗马数字转整数

遍历&#xff0c;下一个值不大于当前值就加上当前值&#xff0c;否则就减去当前值 class Solution {public int romanToInt(String s) {Map<Character, Integer> map Map.of(I, 1,V, 5,X, 10,L, 50,C, 100,D, 500,M, 1000);int sum 0;for (int i 0; i < s.length(…

线程安全问题的原因与解决方案总结

目录 一 什么是线程安全&#xff1f; 二 线程安全问题的实例 三 线程安全问题的原因 1.多个线程修改共享数据 2.抢占式执行 3.修改操作不是原子的 4.内存可见性问题 5.指令重排序 四 解决方案 1.同步代码块 2.同步方法 3.加锁lock解决问题 一 什么是线程安全&…

Tunable laser激光器的前向和后向锁波长方案

----转载自秦岭农民的文章 Tunable laser可调激光器的锁波长方案 激光器锁波长技术是指通过各种手段将激光器的输出波长稳定在某一特定值或范围内&#xff0c;以满足高精度应用的需求。这些技术包括Etalon、波长计/光谱仪反馈、波长参考源、温度控制、电流控制、锁相环&#…

蓝桥杯:日期统计

文章目录 问题描述解法一递归解法二&#xff1a;暴力破解 问题描述 首先我们要了解什么是子序列&#xff0c;就是一个序列之中可以忽略元素但是不能改变顺序之后获得的序列就叫做子序列。 如"123"就是"11234"的子序列而不是"11324"的子序列 解法…

IQ解调原理#通信原理系列

IQ解调原理&#xff1a;接收端收到s(t)信号后&#xff0c;分为两路&#xff1a; 一路信号乘以cosω₀t再积分&#xff0c;就可以得到a&#xff1a; 另一路乘以 -sinω₀t再积分&#xff0c;就可以得到b&#xff1a;

C++蓝桥杯实训篇(三)

片头 嗨&#xff01;小伙伴们&#xff0c;大家好~ 今天我们来学习前缀和与差分相关知识&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 一、一维前缀和 以上&#xff0c;是我们用数学知识求解区间和&#xff0c;现在我们使用前缀和来求解&#xff1a; 我们知道&am…

【数据挖掘】岭回归(Ridge Regression)和线性回归(Linear Regression)对比实验

这是一个非常实用的 岭回归&#xff08;Ridge Regression&#xff09;和线性回归&#xff08;Linear Regression&#xff09;对比实验&#xff0c;使用了 scikit-learn 中的 California Housing 数据集 来预测房价。 &#x1f4e6; 第一步&#xff1a;导入必要的库 import num…

CExercise_07_1指针和数组_1编写函数交换数组中两个下标的元素

题目&#xff1a; 要求编写函数将数组作为参数传递来实现&#xff1a; 1.编写函数交换数组中两个下标的元素。函数声明如下&#xff1a;void swap(int *arr, int i, int j) 。要求不使用[]运算符&#xff0c;将[]还原成解引用运算符和指针加法来完成。 关键点 通过指针交换数组…

塔能科技:智能路灯物联运维产业发展现状与趋势分析

随着智慧城市建设的推进&#xff0c;智能路灯物联运维产业正经历快速发展&#xff0c;市场规模持续扩大。文章探讨了智能路灯物联运维的技术体系、市场机遇和挑战&#xff0c;并预测了未来发展趋势&#xff0c;为行业发展提供参考。 关键词 智能路灯&#xff1b;物联运维&#…