Git基础

1. 前言

限于作者能力水平,本文可能存在的谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 什么是 Git?

Git是一个分布式的版本管理工具,起源于2005年,当时Linux内核使用BitKeeper管理代码,但开发BitKeeper的商业公司,不再免费提供给Linux内核社区使用,于是,Linus自己设计了Git,来管理Linux内核社区的代码。

3. Git和传统的版本管理工具有什么差别?

传统的版本管理工具,如SVN,采用的是集中式管理,一台服务器主机,记录了所有版本的内容,而作为客户端的机器,可以从服务器主机下载数据、更新数据到服务器,组织方式如下图:
在这里插入图片描述
但一旦服务器不工作了,那啥事也干不成了。
Git作为分布式的管理工具,采用如下的拓扑组织结构:
在这里插入图片描述
看到了吗?Git的每台机器上,都有所有版本的完整记录,包括提交的历史记录,一台机器宕机,其它的机器可以照样工进行提交、版本控制等工作,这就是它区别于传统版本管理工具的最大区别。

4. Git的基本工作原理

4.1 Git对文件内容的管理

传统的版本管理工具,如SVN,它们记录文件内容的差异:
在这里插入图片描述
Git直接记录文件快照,而非差异比较。上图中,看到Git在每个版本中(Version 1, 2, 3, 4, 5)中,记录的是每个文件的快照;同时为了效率,如果文件没有改变,只保留一个指向文件的链接,而不再重新存储该文件。
Git几乎所有的操作都是在本地,用一个40个十六进制字符组成的SHA-1字串来指向一个文件,而不是文件名;文件内容不同的版本,SHA-1值不同。

4.2 Git管理下文件的3种状态

(1)已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
(2)已暂存(staged):已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
(3)已提交(committed):已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区暂存区Git 仓库目录
在这里插入图片描述
工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

4.3 Git 基本工作流程

(1) 在工作区中修改文件。
(2)将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
(3)提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。

4.4 Git 基础操作

4.4.1 初始化本地仓库

git init

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨架。但是,在这个时候,我们仅仅是做了一个初始化的操作,你项目里的文件还没有被跟踪。

4.4.2 克隆远程仓库

git clone <仓库地址>

4.4.3 检查当前状态

git status
git status -s # 简略形式

4.4.4 跟踪新文件

git add <new-filename>

添加文件到暂存区,对于修改过的文件,使用相同的操作。

4.4.5 查看文件修改

4.4.5.1 比较工作目录暂存区内容差异
git diff
4.4.5.2 比较暂存区Git仓库内容(已提交内容)
# 两条命令具有相同的效果
git diff –staged
git diff --cached

4.4.6 提交到Git仓库

git commit

将暂存区的内容,提交到Git仓库

4.4.7 移除文件

4.4.7.1 同时从暂存区本地磁盘移除
git rm <filename>

如果是修改过的文件,要加 –f 参数。

4.4.7.2 仅从暂存区移除
git rm –cached <filename>

4.4.8 文件移动或重命名

git mv <old-name> <new-name>

这条命令相当于:

mv <old-name> <new-name>
git rm <old-name>
git add <new-name>

4.4.9 查看提交日志历史

git log # 显示所有提交日志
git log -- /path/to/file # 显示某个文件的提交历史
git show <commit> # 显示某次提交的详细内容
git show --summary <commit> # 仅显示某次提交日志
git show --stat <commit> # 显示某次提交日志和涉及的文件列表
git show --name-only # 显示某次提交日志和涉及的文件列表
git show --name-status # 显示某次提交日志和涉及的文件列表

4.4.10 打标签

git tag
git tag --contains <commit> # 列出包含 commit 的 tag

4.4.11 撤销操作

参考Git官方文档:重置解密

4.4.12 远程仓库使用

请参考Git官方文档:远程仓库的使用

4.4.12 分支操作

请参考Git官方文档:分支操作

4.4.13 其它

git describe --contains <commit> # 如查询 commit 引入的 Linux 内核版本
git status -uno # 不显示未跟踪的文件

5. 后记

本文是参考Git官方文档而成,基本就是个搬运工的角色。Git虽然复杂,但是掌握一些基础后,足以应付工作中的绝大部分需求。读过的 Git 文档中,也没有比 《Pro Git》更好的资料了,花少量的时间,学习其中的1,2,3,7.6, 7.7 等基础章节,基本上就需要担心 Git 的使用了。其它再有需求,可以结合 Git Reference Manual 和《Pro Git》的其余章节进行学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值