Git企业开发级讲解(二)

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

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

文章目录


一、添加⽂件--场景⼀

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、演示

创建文件

powershell 复制代码
touch ReadMe

文件输入内容

powershell 复制代码
vim ReadMe
cat ReadMe

提交到暂存区

powershell 复制代码
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 即可:

powershell 复制代码
 git commit -m "add modify ReadMe file"

总结

Git版本控制器

相关推荐
Swift社区29 分钟前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht30 分钟前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht33 分钟前
Swift闭包的本质
开发语言·ios·swift
wjs202436 分钟前
Swift 数组
开发语言
吾日三省吾码2 小时前
JVM 性能调优
java
stm 学习ing2 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc3 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐3 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi773 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器