Git 的基本使用

1.创建 Git 本地仓库

仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来,例如下面代码创建了gitcode_linux的文件夹,之后再对其进行初始化。创建⼀个 Git 本地仓库对应的命令为 git init ,注意命令要在⽂件⽬录下执⾏,例如
我们发现,当前⽬录下多了⼀个 .git 的隐藏⽂件, .git ⽬录是 Git 来跟踪管理仓库的,不要⼿动修改这个⽬录⾥⾯的⽂件,不然改乱了,就把 Git 仓库给破坏了。其中包含 Git 仓库的诸多细节,我们可以进⼊看看。

2.配置 Git

当安装 Git 后⾸先要做的事情是设置你的⽤⼾名称 和 e-mail 地址,这是⾮常重要的。配置命令为:
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
# 把 Your Name 改成你的昵称
# 把 email@example.com 改成邮箱的格式,只要格式正确即可。
其中 --global 是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的 Git 仓库都会使⽤这个配置。如果你希望在不同仓库中使⽤不同的 name e-mail ,可以不要 --global 选项,但要注意的是,执⾏命令时必须要在仓库⾥。即下面代码执行的路径在gitcode_linux下。
查看配置命令为:
git config -l
删除对应的配置命令为:
git config [--global] --unset user.name
git config [--global] --unset user.email

3. 认识⼯作区、暂存区、版本库

⼯作区:是在电脑上你要写代码或⽂件的⽬录。
暂存区:英⽂叫 stage 或 index。⼀般存放在 .git ⽬录下的 index ⽂件(.git/index)中,我们把暂存区有时也叫作索引(index)。
版本库:⼜名仓库,英⽂名 repository 。⼯作区有⼀个隐藏⽬录 .git ,它不算⼯作区,⽽是 Git 的版本库。这个版本库⾥⾯的所有⽂件都可以被 Git 管理起来,每个⽂件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
下⾯这个图展⽰了⼯作区、暂存区和版本库之间的关系:
图中左侧为⼯作区,右侧为版本库。Git 的版本库⾥存了很多东西,其中最重要的就是暂存区。
在创建 Git 版本库时,Git 会为我们⾃动创建⼀个唯⼀的 master 分⽀,以及指向 master 的⼀个指针叫 HEAD。
当对⼯作区修改(或新增)的⽂件执⾏ git add 命令时,暂存区⽬录树的⽂件索引会被更新。
当执⾏提交操作 git commit 时,master 分⽀会做相应的更新,可以简单理解为暂存区的⽬录树才会被真正写到版本库中。
由上述描述我们便能得知:通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件。必须要通过使⽤ git add  git commit  命令才能将⽂件添加到仓库中进⾏管理!!!

4. 添加⽂件

在包含 .git 的⽬录下新建⼀个 ReadMe ⽂件,我们可以使⽤ git add 命令可以将⽂件添加到暂存区:
添加⼀个或多个⽂件到暂存区: git add [ file1 ] [ file2 ] ...
添加指定⽬录到暂存区,包括⼦⽬录: git add [ dir ]
添加当前⽬录下的所有⽂件改动到暂存区: git add .
再使⽤ git commit 命令将暂存区内容添加到本地仓库中:
提交暂存区全部内容到本地仓库中: git commit - m "message"
提交暂存区的指定⽂件到仓库区: git commit [ file1 ] [ file2 ] ... - m "message"
注意 git commit 后⾯的 -m 选项,要跟上描述本次提交的 message,由⽤⼾⾃⼰完成,这部分内
容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们⼈看的。
git commit 命令执⾏成功后会告诉我们,1个⽂件被改动(就是我们新添加的ReadMe⽂件)。
我们还可以多次 add 不同的⽂件,⽽只 commit ⼀次便可以提交所有⽂件,是因为需要提交的⽂件是通通被 add 到暂存区中,然后⼀次性 commit 暂存区的所有修改。
截⾄⽬前为⽌,我们已经更够将代码直接提交⾄本地仓库了。我们可以使⽤ git log 命令,来查看 下历史提交记录:
该命令显⽰从最近到最远的提交⽇志,并且可以看到我们 commit 时的⽇志消息。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数.
需要说明的是,我们看到每行最前面的⼀⼤串类似 7ba3...aeb6  的是每次提交的 commit id (版本号),Git 的 commit id 不是1,2,3……递增的数字,⽽是⼀个 SHA1 计算出来的⼀个⾮常⼤的数字,⽤⼗六进制表⽰

5.查看 .git ⽂件

先来看看我们的 .git 的⽬录结构:
1. index 就是我们的暂存区,add 后的内容都是添加到这⾥的。
2. HEAD 就是我们的默认指向 master 分⽀的指针:
⽽默认的 master 分⽀,其实就是:
打印的 7ba3a19c5990b6a0949f89cc70e1a307cdb3aeb6 是什么东西呢?实际上是当前最新的 commit id
3. objects 为 Git 的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏ git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,就位于 ".git/objects" ⽬录下。
找到某个⽂件之后,⼀般不能直接看到⾥⾯是什么,该类⽂件是经过 sha (安全哈希算法)加密过的⽂件,好在我们可以使⽤ git cat-file -p + 该文件commit id 命令来查看版本库对象的内容。下面我们以HEAD指针指向的文件为例,即最新的一次文件提交。
其中,还有⼀⾏ tree 349e7a9afb8b97e6f2a9a632cf783f188da5fe1a ,我们使⽤同样的⽅法,看看结果:
总结⼀下,在本地的 git 仓库中,有⼏个⽂件或者⽬录很特殊
index: 暂存区, git add 后会更新该内容。
HEAD: 默认指向 master 分⽀的⼀个指针。
refs/heads/master: ⽂件⾥保存当前 master 分⽀的最新 commit id
objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改。

6.修改⽂件

Git ⽐其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,⽽⾮⽂件。什么是修改?⽐如新增了⼀⾏,这是⼀个修改,删除了⼀⾏,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些⼜加了⼀些,也是⼀个修改,甚⾄创建⼀个新⽂件,也算⼀个修改。让我们将 ReadMe ⽂件进⾏⼀次修改,增加三行hello world:
此时,仓库中的 ReadMe 和我们⼯作区的 ReadMe 是不同的,如何查看当前仓库的状态呢? git status 命令⽤于查看在上次提交之后是否有对⽂件进⾏再次修改。
上⾯的结果告诉我们,ReadMe 被修改过了,但还没有完成添加与提交。⽬前,我们只知道⽂件被修改了,如果能知道具体哪些地⽅被修改了,就更好了。 git diff [file] 命令⽤来显⽰暂存区和⼯作区⽂件的差异,显⽰的格式正是Unix通⽤的diff格 式。也可以使⽤ git diff HEAD -- [file] 命令来查看版本库和⼯作区⽂件的区别。
我们再使用git add命令把它提交到本地仓库。
我们没有再看到上⾯ no changes added to commit (use "git add" and/or "git commit -a") 的消息了。接下来让我们继续 git commit 即可。

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

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

相关文章

少年我看你有缘,这部《html标签大合集》就送你了

HTML标签是用于定义网页结构和内容的元素。标签通常是成对出现的&#xff0c;由开始标记和结束标记组成&#xff0c;开始标记使用尖括号< >包围&#xff0c;结束标记使用尖括号和斜杠/包围。开始标记中的元素属性可以提供额外的信息。 1.基础标签 html 标签 head 头标…

Codeforces Round 967 (Div. 2) C题Guess The Tree

题目链接 令1是根&#xff0c;我们可以一层一层的递推出去。容易知道询问a&#xff0c;b如果结果是c&#xff0c;那么c就是a&#xff0c;b路径上的中点。我们可以先让根1和其他n-1个点都询问一遍&#xff0c;如果返回值是1&#xff0c;那么这些点就是第二层&#xff0c;深度为2…

【注解】反序列化时匹配多个 JSON 属性名 @JsonAlias 详解

JsonAlias 注解是 Jackson 提供的一个功能强大的注解&#xff0c;允许一个字段在反序列化时匹配多个 JSON 属性名。它适用于在处理多种输入数据格式时&#xff0c;或当 JSON 数据的键名可能变化时。 一、JsonAlias 的作用 多种别名&#xff1a;JsonAlias 允许你为一个字段定义…

ZNS SSD是不是持久缓存的理想选择?

随着数据量的增加和技术的进步&#xff0c;对于高效、可靠的存储解决方案的需求日益增长。传统的基于块的SSD虽然具有成本效益和持久性的优点&#xff0c;但在处理写密集型和更新密集型工作负载时存在局限性。 NAND闪存的特点是数据只能按页&#xff08;例如4KiB&#xff09;写…

2024年最新最全的【大模型学习路线规划】从零基础入门到精通!

2024年最新最全的大模型学习路线规划&#xff0c;对于零基础入门到精通的学习者来说&#xff0c;可以遵循以下阶段进行&#xff1a; 文章目录 一、基础准备阶段数学基础&#xff1a;编程语言&#xff1a;深度学习基础&#xff1a; 二、核心技术学习阶段Transformer模型&#xf…

[Linux#41][线程] 线程的特性 | 分离线程 | 并发的问题

1.线程的特性 进程和线程的关系如下图: 关于进程线程的问题 • 如何看待之前学习的单进程&#xff1f;具有一个线程执行流的进程 线程 ID 及进程地址空间布局 pthread_ create 函数会产生一个线程 ID&#xff0c;存放在第一个参数指向的地址中。 该线程 ID 和前面说的线程 ID …

动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本

系统流程概览 main函数 对于一个服务器程序来说&#xff0c;因为要为外部的客户端程序提供网络服务&#xff0c;也就是进行数据的读写&#xff0c;这就必然需要一个 socket 文件描述符&#xff0c;只有拥有了文件描述符 C/S 两端才能通过 socket 套接字进行网络通信&#xff0…

4.Redis单线程和多线程

1.Redis的单线程 Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程完成的&#xff0c;Redis在处理客户端的请求时包括获取&#xff08;Socket读&#xff09;、解析、执行、内容返回&#xff08;Socket写&#xff09;等都由一个顺序串行的主线程处理&#xff0c;这…

ProxySQL 读写分离配置

ProxySQL 是一个高性能、高可用的 MySQL 代理软件&#xff0c;旨在提升 MySQL 数据库的可扩展性和性能。它可以在应用程序和 MySQL 服务器之间充当中间层&#xff0c;提供强大的路由、负载均衡和查询优化功能。 ProxySQL 的主要功能&#xff1a; 查询路由&#xff1a; ProxySQ…

MySQL DDL详细讲解和常见问题案例示范

MySQL 删除操作和连接类型详细讲解和案例示范 DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;是用于创建和修改数据库结构的语句&#xff0c;包括创建表、索引、视图&#xff0c;以及修改这些结构。本文将详细介绍MySQL DDL语句的常见用法&…

stm32hal库can使用记录

一、单片机最小系统板使用can 资料&#xff1a;https://blog.csdn.net/yoie01/article/details/136921034 https://blog.csdn.net/qq_36561846/article/details/117431769 这里面有一个问题&#xff0c;最小系统板没有can收发器&#xff0c;所以没法直接用&#xff0c;只能测…

市盈率的概念

写篇有关市盈率的【不务正业】的内容。 重要公式 市盈率 官方的定义 平均市盈率&#xff1d;∑(收盘价发行数量)/∑(每股收益发行数量)&#xff0c;统计时剔除亏损及暂停上市的上市公司。 静态市盈率 滚动市盈率&#xff08;TTM&#xff09; 股票市盈率的意义 如果某股票有较…

培训第三十四天(初步了解Docker与套接字的应用)

上午 回顾 1、主从复制&#xff08;高可用&#xff09; 2、传统的主从复制 3、gtids事务型的主从复制 4、注意 1&#xff09;server_id唯一 2&#xff09;8.X版本需要get_ssl_pub_key 3&#xff09;5.X不需要 4&#xff09;change master to 5&#xff09;stop | sta…

项目服务器登录部分

从连接池中获取上下文&#xff0c;接受连接。 async_accept 这个函数本质上是监听和接受客户端连接的结合操作。 void CServer::StartAccept() {auto& io_context AsioIOServicePool::GetInstance()->GetIOService();std::shared_ptr<CSession> new_session mak…

JS中encodeURIComponent和encodeURI函数的区别

1、encodeURIComponent函数用于对完整的URL组件进行编码&#xff0c;包括查询参数、路径片段等。 它会对所有非字母数字字符进行编码&#xff0c;并将其替换为相应的URL编码形式。这包括对特殊字符&#xff08;如冒号、斜杠、问号、等号、加号等&#xff09;的编码。encodeURI…

拍抖音在哪里去水印,三招教你快速掌握去水印技巧

在抖音上&#xff0c;我们经常会看到一些精彩的内容&#xff0c;想要保存下来&#xff0c;但往往视频上会有水印。本文将分享五个免费且高效的去除抖音视频水印的技巧&#xff0c;帮助你轻松保存无水印的视频。 技巧一&#xff1a;奈斯水印助手(小程序) 奈斯水印助手是一款专…

GIS空间数据库,基本概念

文章目录 一、前言二、空间概念三、地理空间四、空间数据五、数据库六、空间数据库七、空间数据库与传统数据库的差异7.1 信息描述差异7.2 数据管理差异7.3 数据操作差异7.3 数据更新差异7.3 服务应用差异 一、前言 数据是指客观事物的属性、数量、位置及其相互关系等的符号描…

JavaScript(30)——解构

数组解构 数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法 基本语法&#xff1a; 赋值运算符左侧的[]用于批量声明变量&#xff0c;右侧数组的单元值将被赋值给左侧变量变量的顺序对应数组单元值的位置依次进行赋值操作 const arr [1, 2, 3, 4, 5]const [a, b…

云渲染的三个条件是指什么!哪三点最重要!

云渲染技术以其灵活性和效率&#xff0c;让创意人士和企业无论身处何地&#xff0c;都能通过网络接入强大的远程服务器&#xff0c;轻松完成复杂的图形渲染任务&#xff0c;但要发挥其魔力&#xff0c;我们得满足一些关键条件。 一、网络连接&#xff1a;云渲染的桥梁 首先&am…

PHP伪协议漏洞详解(附案例讲解)

文章目录 引言什么是PHP伪协议常见的PHP伪协议PHP伪协议漏洞原理实际案例分析案例一&#xff1a;利用php://filter读取敏感文件源码案例二&#xff1a;利用zip://协议执行压缩包中的恶意代码案例三&#xff1a;利用data://协议执行任意代码 引言 PHP伪协议是PHP中一种用于访问…