当前位置: 首页 > news >正文

Git企业开发级讲解(二)

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、添加⽂件--场景⼀
    • 1、操作
    • 2、演示
  • 二、查看 .git ⽂件
    • 1、tree .git命令
    • 2、内容讲解
    • 3、总结一下
  • 三、添加⽂件--场景⼆
  • 四、修改文件
  • 总结


一、添加⽂件–场景⼀

1、操作

在包含 .git 的⽬录下新建⼀个 ReadMe ⽂件,我们可以使⽤ git add 命令可以将⽂件添加到暂存区:

  1. 添加⼀个或多个⽂件到暂存区: git add [file1] [file2] …
  2. 添加指定⽬录到暂存区,包括⼦⽬录: git add [dir]
  3. 添加当前⽬录下的所有⽂件改动到暂存区: git add .

再使⽤ git commit 命令将暂存区内容添加到本地仓库中:

  1. 提交暂存区全部内容到本地仓库中: git commit -m “message”
  2. 提交暂存区的指定⽂件到仓库区: git commit [file1] [file2] … -m “message”

注意 git commit 后⾯的 -m 选项,要跟上描述本次提交的 message,由⽤⼾⾃⼰完成,这部分内
容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们⼈看的。

2、演示

创建文件

touch ReadMe

在这里插入图片描述

文件输入内容

vim ReadMe
cat ReadMe

在这里插入图片描述

提交到暂存区

git add ReadMe

在这里插入图片描述

提交到master

在这里插入图片描述
在这里插入图片描述

git commit 命令执⾏成功后会告诉我们,1个⽂件被改动(就是我们新添加ReadMe⽂件),插⼊了两⾏内容(ReadMe有两⾏内容)。

我们还可以多次 add 不同的⽂件,⽽只 commit ⼀次便可以提交所有⽂件,是因为需要提交的⽂件是通通被 add 到暂存区中,然后⼀次性 commit 暂存区的所有修改。如:
在这里插入图片描述

截⾄⽬前为⽌,我们已经更够将代码直接提交⾄本地仓库了。我们可以使⽤ git log 命令,来查看下历史提交记录:
在这里插入图片描述

该命令显⽰从最近到最远的提交⽇志,并且可以看到我们 commit 时的⽇志消息。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数:

在这里插入图片描述
需要说明的是,我们看到的⼀⼤串类似 6d9a5e4…721a2 的是每次提交的 commit id (版本号),Git 的 commit id 不是1,2,3……递增的数字,⽽是⼀个 SHA1 计算出来的⼀个⾮常⼤的数字,⽤⼗六进制表⽰(你看到的 commit id 和我的肯定不⼀样,以你⾃⼰的为准)。


二、查看 .git ⽂件

1、tree .git命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、内容讲解

  1. index 就是我们的暂存区,add 后的内容都是添加到这⾥的。
  2. HEAD 就是我们的默认指向 master 分⽀的指针:

在这里插入图片描述

⽽默认的 master 分⽀,其实就是:

在这里插入图片描述
打印的 6d9a5e4972e5f69973bf3e8ebb527e23cea721a2 是什么东西呢?保存的就是当前最新的 commit id 。

  1. objects 为 Git 的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏ git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,就位于 “.git/objects” ⽬录下,让我们来看看这些对象有何⽤处:

在这里插入图片描述
查找 object 时要将 commit id 分成2部分,其前2位是⽂件夹名称,后38位是⽂件名称。
找到这个⽂件之后,⼀般不能直接看到⾥⾯是什么,该类⽂件是经过 sha (安全哈希算法)加密过的⽂件,好在我们可以使⽤ git cat-file 命令来查看版本库对象的内容:
在这里插入图片描述

其中,还有⼀⾏ tree bcc6b6348c70d8ff8920e64fd711f5ddac35b130 ,我们使⽤同样的⽅法,看看结果:
在这里插入图片描述

在看 ReadMe 对应的在看 ReadMe 对应的c940fc8d96f03c8bc23eabd2b8af558afde227f9
在这里插入图片描述
这是我们对ReadMe做的修改!!被git记录了下来!!

3、总结一下

• index: 暂存区, git add 后会更新该内容。
• HEAD: 默认指向 master 分⽀的⼀个指针。
• refs/heads/master: ⽂件⾥保存当前 master 分⽀的最新 commit id 。
• objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改。


三、添加⽂件–场景⼆

学习到这⾥,我们已经清楚了如何向仓库中添加⽂件,并且对于⼯作区、暂存区、版本库也有了⼀定
的认识。那么我们再展⽰⼀种添加⽂件的场景,能加深对⼯作区、暂存区、版本库的理解,⽰例如:
在这里插入图片描述
在这里插入图片描述
提交后发现打印了 1 file changed, 0 insertions(+), 0 deletions(-) ,意思是只
有⼀个⽂件改变了,这时我们提出了疑问,不是新增了两个⽂件吗?
再来回忆下, git add 是将⽂件添加到暂存区, git commit 是将暂存区的内容添加到本地仓库中。由于我们并没有使⽤ git add file12,file12 就不在暂存区中维护,所以我们 commit 的时候
其实只是把已经在暂存区的 file11 提交了,⽽遗漏了⼯作区的 file12。如何提交 file12 呢?很简单,再次add , commit 即可。


四、修改文件

修改:增加,修改,删除
Git ⽐其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,⽽⾮⽂件。
什么是修改?⽐如你新增了⼀⾏,这就是⼀个修改,删除了⼀⾏,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些⼜加了⼀些,也是⼀个修改,甚⾄创建⼀个新⽂件,也算⼀个修改。
让我们将 ReadMe ⽂件进⾏⼀次修改:
在这里插入图片描述
此时,仓库中的 ReadMe 和我们⼯作区的 ReadMe 是不同的,如何查看当前仓库的状态呢? git status 命令⽤于查看在你上次提交之后是否有对⽂件进⾏再次修改。
在这里插入图片描述

上⾯的结果告诉我们,ReadMe 被修改过了,但还没有完成添加与提交。
⽬前,我们只知道⽂件被修改了,如果能知道具体哪些地⽅被修改了,就更好了。有同学会说,我刚改的我知道呀!可是,你还记得你三天前写了什么代码吗?或者没写?
在这里插入图片描述
在这里插入图片描述
git diff [file] 命令⽤来显⽰暂存区和⼯作区⽂件的差异,显⽰的格式正是Unix通⽤的diff格式。也可以使⽤ git diff HEAD – [file] 命令来查看版本库和⼯作区⽂件的区别。
知道了对 ReadMe 做了什么修改后,再把它提交到本地仓库就放⼼多了。
在这里插入图片描述
git add 之后,就没有看到上⾯ no changes added to commit (use “git add”
and/or “git commit -a”) 的消息了。接下来让我们继续 git commit 即可:

 git commit -m "add modify ReadMe file"

总结

Git版本控制器

相关文章:

  • 【uniapp】确认弹出框,选择确定和取消
  • File Upload
  • 深入理解 Spring Boot 内置工具类:ReflectionUtils
  • GPT 写作与改编
  • RabbitMQ 系列教程
  • ChatGPT重磅升级 奢侈品VERTU推出双模型AI手机
  • Android 12 S 系统开机流程分析 - SecondStageMain(三)
  • 一封来自未来的offer
  • Vite探索:构建、启程、原理、CSS艺术与插件魔法
  • CSS常用示例100+ 【目录】
  • MyBatis 知识总结
  • 从Docker Hub获取镜像和创建容器
  • 绩效管理系统有哪些?
  • 新生儿奶瓣:原因、科普和注意事项
  • 线性代数-Python-05:矩阵的逆+LU分解
  • .pyc 想到的一些问题
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • ES6 ...操作符
  • Go 语言编译器的 //go: 详解
  • js中forEach回调同异步问题
  • Laravel 中的一个后期静态绑定
  • learning koa2.x
  • Odoo domain写法及运用
  • python学习笔记 - ThreadLocal
  • React-flux杂记
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpringBoot几种定时任务的实现方式
  • Webpack 4x 之路 ( 四 )
  • 应用生命周期终极 DevOps 工具包
  • (33)STM32——485实验笔记
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三)c52学习之旅-点亮LED灯
  • (一) storm的集群安装与配置
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Micro Framework初体验
  • .net refrector
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 的字符串暂存池
  • .Net6 Api Swagger配置
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • ::什么意思
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C#]C#学习笔记-CIL和动态程序集
  • [CF407E]k-d-sequence
  • [Labtools 27-1429] XML parser encountered a problem in file
  • [Linux] day07——查看及过滤文本
  • [Linux] 一文理解HTTPS协议:什么是HTTPS协议、HTTPS协议如何加密数据、什么是CA证书(数字证书)...
  • [macOS] Mojave10.14 夜神安卓模拟器启动问题
  • [MySQL]SQL优化之索引的使用规则
  • [Noi2015]程序自动分析