【书生大模型实战营】Git 基础知识-L0G3000

本文是书生大模型实战营系列的第三篇文章,本文的主题是:Git基础知识点。

原始教程链接:Tutorial/docs/L0/git/readme.md at camp4 · InternLM/Tutorial

1.Git总览

什么是Git?

Git是一个分布式版本控制系统,广泛用于软件开发和代码管理。Git最初是为了解决Linux内核开发过程中的协作问题而设计的。Git的设计目标包括提高版本控制系统的速度、增强分支管理的灵活性以及确保数据完整性和项目历史的可靠性。

作为一个分布式版本控制系统,Git允许每个开发者在本地拥有整个项目的完整副本,包括其全部历史记录。这意味着开发者可以在没有网络连接的情况下提交更改、查看日志、撤销操作等。此外,Git通过使用SHA-1哈希算法来命名和识别对象,确保了项目历史的完整性,即使面对复杂且频繁的修改也能保证数据的一致性。

Git不仅简化了开发者之间的工作流程,也使得合并不同开发者的工作变得更加容易。它的出现极大地提高了软件开发过程中版本控制的效率,支持多种合作模式,从而适应不同规模团队的需求。无论是个人项目还是大型团队协作,Git都提供了一个强大而灵活的工具集来管理和追踪代码的变化。

2.安装Git

在Windows上安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

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

这里的 "Your Name" 和 "your.email@example.com" 应替换为你自己的用户名和电子邮件。

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

查看全局配置

git config --global --list

3.Git的一些基本概念

仓库(Repository):仓库是存储你的项目文件及其所有历史记录的地方。仓库不仅保存了当前版本的文件,还包括了整个项目的所有历史更改记录、提交日志、分支信息等。仓库分为两种:本地仓库远程仓库

工作区(Working Directory):指的是从Git仓库中checkout出来的代码目录,即你当前正在工作的区域。

暂存区(Staging Area):这是一个临时存放更改的区域,用于准备下一次提交。使用git add命令可以将修改过的文件添加到暂存区,标记为准备提交的状态。

三者之间的关系:

  • 从工作区到暂存区:你在工作区中所做的任何更改(新增、修改或删除文件),都需要通过git add命令将其添加到暂存区。这一步骤让你有机会检查和组织你想要在一个提交中包含的所有更改。

  • 从暂存区到Git仓库区:一旦你满意了暂存区的状态,就可以运行git commit命令来创建一个新的提交。这个提交会永久地保存在你的本地Git仓库中,包括所有暂存区的更改以及一条描述性的提交消息。

  • 与远程仓库同步:如果你正在与团队协作或者想要备份你的代码,你需要使用git push命令将本地仓库中的提交推送到远程仓库(如GitHub、GitLab等)。

提交(commit):当你完成某些修改后,可以通过git commit命令将暂存区中的更改保存为一个新提交。每个提交都有一个唯一的SHA-1哈希值作为标识符,并包含了一个关于此次更改的简短描述信息(即提交信息)。提交是Git追踪项目历史的基础单位。

分支(Branch):分支允许你在不影响主线(通常是mastermain分支)的情况下探索不同的想法或修复问题。Git分支操作非常轻量级,创建、合并分支都非常快捷。通过git branch可以查看、创建、删除分支,使用git checkout切换分支。

假设你正在为你的项目开发一项新功能:

  1. 首先,确保你在主分支上:git checkout main
  2. 创建并切换到新的分支:git checkout -b feature-xyz
  3. 在新分支上进行更改、添加文件至暂存区并提交这些更改。
  4. 开发完成后,切换回主分支:git checkout main
  5. 将新功能分支合并到主分支:git merge feature-xyz
  6. 最后,如果你确定不再需要这个分支了,可以安全地删除它:git branch -d feature-xyz

合并(Merge):当不同分支上的工作需要整合时,可以使用git merge命令将指定分支的更改合并到另一个分支中。这有助于整合团队成员的不同贡献,并解决可能存在的冲突。

标签(Tag):标签通常用于给特定的提交打上永久性标记,比如发布版本。这样可以帮助你快速定位重要的里程碑式提交,而不必记住其具体的哈希值。通过git tag可以创建、列出和删除标签。

克隆(Clone):使用git clone [url]可以从远程服务器获取一个项目的完整副本到本地,包括其全部历史记录。这是开始参与开源项目或与团队协作的第一步。

拉取(Pull)推送(Push)git pull用于从远程仓库获取更新并尝试合并到当前分支;git push则是将本地提交推送到远程仓库,使团队成员可以看到你的最新更改。

4.git的一些小教程

git常见的命令如下:

常见命令:

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

  1. 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
  2. 使用命令git commit -m <message>,完成

要随时掌握工作区的状态,使用git status命令。如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

版本穿梭

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

每次修改,如果不用git add到暂存区,那就不会加入到commit中。

  1. 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
  2. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
  3. 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git

关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。

分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

Git支持多种协议,包括https,但ssh协议速度最快。

Git鼓励大量使用分支:

  1. 查看分支:git branch
  2. 创建分支:git branch <name>
  3. 切换分支:git checkout <name>或者git switch <name>
  4. 创建+切换分支:git checkout -b <name>或者git switch -c <name>
  5. 合并某分支到当前分支:git merge <name>
  6. 删除分支:git branch -d <name>

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

git log --graph命令可以看到分支合并图。

Git分支十分强大,在团队开发中应该充分应用。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;

master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

开发一个新功能,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

多人协作的工作模式通常是这样:

  1. 首先,可以尝试用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

抓取(pull)和推送(push)

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

标签Tag

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签。

Github

  • 在GitHub上,可以任意Fork开源仓库;
  • 自己拥有Fork后的仓库的读写权限;
  • 可以推送pull request给官方仓库来贡献代码。

5.本次作业

本次的作业任务要求如下:

完成后的提交截图:

本次就写到这里啦,感兴趣的小伙伴,收藏点赞关注哈! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue旅游管理系统的设计和实现(源码+文档+部署讲解)

个人名片 &#x1f525; 源码获取 | 毕设定制| 商务合作&#xff1a;《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片环境需要技术栈功能介绍功能说明 环境需要 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&…

python如何解析word文件格式(.docx)

python如何解析word文件格式&#xff08;.docx&#xff09; .docx文件遵从开源的“Office Open XML标准”&#xff0c;这意味着我们能用python的文本操作对它进行操作&#xff08;实际上PPT和Excel也是&#xff09;。而且这并不是重复造轮子&#xff0c;因为市面上操作.docx的…

Visual Studio2019调试DLL

1、编写好DLL代码之后&#xff0c;对DLL项目的属性进行设置&#xff0c;选择待注入的DLL&#xff0c;如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后&#xff0c;按F5启动调试。弹出选择注入的exe的界面之后&#xff0c;使用代码注入器注入步骤2中生成的dll&#xff…

nginx 配置防爬虫

今天早上查看服务器&#xff0c;发现昨天发布的一个在线解析充电桩协议的网页工具有大量的访问记录&#xff0c;应该是爬虫在爬api接口数据。该工具api接口后台用的是python写的&#xff0c;和大多数项目一样也采用nginx反向代理&#xff0c;由于采用nginx&#xff0c;可以利用…

日志收集Day001

1.ElasticSearch 作用&#xff1a;日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml&#xff08;这里yy做了别名&#xff0c;过滤掉空行和注释行&#xff09; yy /etc/el…

微信小程序-base64加解密

思路&#xff1a;先创建一个base64.js的文件&#xff0c;这个文件可以作为专门加解密的文件模块&#xff0c;需要时就引用&#xff1b;创建好后&#xff0c;引用base64.js里的加解密函数。 注意&#xff1a;引用模块一定要引用正确的路径&#xff0c;否则会报错。 base64.js:…

【网络协议】【http】【https】AES-TLS1.2

【网络协议】【http】【https】AES-TLS1.2 https并不是一个协议 而是在传输层之间添加了SSL/TLS协议TLS TLS 协议用于应用层协议&#xff08;如 HTTP&#xff09;和传输层&#xff08;如 TCP&#xff09;之间&#xff0c;增加了一层安全性来解决 HTTP 存在的问题&#xff0c;H…

打造更安全的Linux系统:玩转PAM配置文件

在Linux系统中&#xff0c;用户认证是确保系统安全的关键步骤。PAM&#xff08;可插拔认证模块&#xff09;为我们提供了一个非常灵活的框架&#xff0c;帮助我们管理各种服务的认证过程。其中&#xff0c;/etc/pam.d目录是PAM配置的核心部分&#xff0c;这里存放了每个服务所需…

无人机技术架构剖析!

一、飞机平台系统 飞机平台系统是无人机飞行的主体平台&#xff0c;主要提供飞行能力和装载功能。它由机体结构、动力装置、电气设备等组成。 机体结构&#xff1a;无人机的机身是其核心结构&#xff0c;承载着其他各个组件并提供稳定性。常见的机身材料包括碳纤维、铝合金、…

【西藏乡镇界面】图层arcgis格式shp数据有乡镇名称和编码2020年wgs84坐标内容测评

西藏乡镇界面图层arcgis格式shp数据有乡镇名称和编码2020年wgs84坐标无偏移

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

&#x1f525; 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用&#xff08;Enabled&#xff09; 2.3 坐标系&#xff08;Geometry&#xff09; **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题&#xff08;windowTiltle&a…

PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片

目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列&#xff0c;由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品&#xff0c;可实现…

python学opencv|读取图像(三十四)阈值处理-彩色图像

【1】引言 前序已经掌握了使用阈值处理函数控制灰度图的RGB值&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;三十三&#xff09;阈值处理图像-限定像素-CSDN博客 在更早的学习中&#xff0c;灰度图的RGB只有一个通道&#xff0c;也就是各个像素点…

jmeter事务控制器-勾选Generate Parent Sample

1、打开jmeter工具&#xff0c;添加线程组&#xff0c;添加逻辑控制器-事务控制器 2、在事务控制器&#xff0c;勾选Generate parent sample&#xff1a;生成父样本&#xff1b;说明勾选后&#xff0c;事务控制器会作为父节点&#xff0c;其下面的请求作为子节点 3、执行&#…

C++ ——— 学习并使用 string 类

目录 学习 string 类 使用 string 类 实例化一个无参数的 string 对象 实例化一个带参数的 string 对象 合并两个字符串&#xff08;重载了加运算符&#xff09; 通过重载[]访问每个字符 迭代器遍历每个字符 范围 for 遍历每个字符 学习 string 类 何为 string 类&…

拟合算法 (matlab工具箱)

拟合算法&#xff1a; 1线性最小二乘法拟合 使用matlab进行求解 拟合优度&#xff1a;R^2 拟合优度的matlab代码&#xff1a; 2,Matlab工具箱的教学 一些函数: 拟合算法&#xff1a; 插值算法中&#xff0c;得到的多项式f(x)要经过所有样本点。但是如果样本点太多&#…

实力认证 | 海云安入选《信创安全产品及服务购买决策参考》

近日&#xff0c;国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》&#xff0c;报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…

闲谭SpringBoot--ShardingSphere分布式事务探究

文章目录 0. 背景1. 未分库分表时2. 仅分表时3. 分库分表时3.1 不涉及分库表3.2 涉及分库表&#xff0c;且分库表处于一个库3.3 涉及分库表&#xff0c;且分库表处于多个库3.4 涉及分库表&#xff0c;且运行中某库停机 4. 小结 0. 背景 接上篇文章《闲谭SpringBoot–ShardingS…

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建&#xff0c;接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…

【Vue3 入门到实战】3. ref 和 reactive区别和适用场景

目录 ​编辑 1. ref 部分 1.1 ref定义基本数据类型 1.2 ref 定义引用数据类型 2. reactive 函数 3. ref 和 reactive 对比 3.1 原理 3.2 区别 3.3 使用原则 在 Vue 3 中 ref 和 reactive 是用于创建响应式数据的两个核心函数。它们都属于 Composition API 的一部分&…