Git入门笔记(1):基本知识与基本操作
Git入门笔记(一)
Git是一个非常常用的版本控制软件,很多被广泛使用的软件项目都是使用Git进行版本控制的。
本教程将不包括基础的安装流程。
Git文件的三种状态
使用Git进行操作软件时,文件状态有三种:
状态 | 描述 |
---|---|
已提交(committed) | 表示文件已经保存在本地Git库中。 |
已修改(modifiled) | 表示文件已修改,但暂未保存到Git库中。 |
已暂存(staged) | 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 |
由于Git提交文件到Git库时,并不是直接从工作区直接到Git库的,中间存在一个暂存区(staging area),这个过程的文件就被称之为已暂存
。
Git项目的三个工作区域
针对Git文件的三种状态,Git项目分为三个区域:
区域 | 描述 |
---|---|
工作区 | 简单来说就是本地看到的目录。 |
暂存区(stage / index) | 一般存放在.git 目录下,里面包含了Git自动创建的第一个分支master ,以及指向master 的一个指针HEAD 。 |
Git仓库(版本库) | 工作区下隐藏的目录.git ,是Git的版本库(仓库)。 |
Git基本工作流程
- 工作区修改文件
- 对修改后的文件暂存
- 提交更新,将暂存的文件转储到Git仓库内
创建仓库与提交文件
初始化Git本地仓库
在Git的命令行窗口,使用git init
命令可以在本地初始化一个空仓库。
![image-20220420121506627](https://image.icewindy.cn/202204201215657.png)
提交文件至暂存区
我们可以使用git add <path>
的命令,使一个位于path
的文件或者目录添加至暂存区。
![image-20220420122135812](https://image.icewindy.cn/202204201221833.png)
之后我们可以通过git status
的命令,查看工作区与暂存区的文件状态。该命令可以查看到哪些修改被暂存,哪些修改没有,或是哪些文件没有被git追踪到(Untracked files)。
提交至本地仓库
执行git commit
命令可以提交暂存区的文件至本地仓库中。通常在使用该命令时,会选择加入-m <text>
参数,我们可以在<text>
处填入本次提交的说明。
![image-20220420123716186](https://image.icewindy.cn/202204201237212.png)
如果加入-a <file>
参数,我们将不需要执行git add
命令,直接将file
提交至本地仓库。
我们也可以在git commit
后加入<file1> <file2> ....
文件参数,指定暂存区的某文件到本地仓库。
查看提交日志信息
使用git log
命令,我们可以查看到提交日志信息。
![image-20220420123842023](https://image.icewindy.cn/202204201238061.png)
修改文件并提交
实际上修改文件并提交的过程与上面新增一个文件并提交的过程并无太大差异。
首先我们可以用git status
命令来查看我们已修改(modified)的文件。
我们可以得知的信息:
1 | On branch master 在主分支 |
通常的,我们会使用git status -s
来获取简短的输出结果:
一个红色的M表示更改未保存至暂存区,一个绿色M表示更改已保存至暂存区,当同时出现一个红和一个绿M时候,则表示添加至暂存区后又发生了更改。
我们使用git add
提交后,就可以执行git commit -m
来使我们暂存区的更改保存到本地仓库中了。
比较文件不同
我们使用git diff <file>
命令,可以比较文件的不同,当不加入额外参数时,它的作用是查看尚未保存至暂存区的更改。
当我们加入--cached
或是--staged
参数时,作用是查看已保存至暂存区的更改。
当我们加入HEAD
参数时,我们将可以看到已保存至暂存区和未保存的全部更改。
而--stat
参数的加入,可以使其仅展示摘要,而不是完整的修改内容。
撤销暂存区更改
执行git reset HEAD <file>
我们可以撤销已保存至暂存区的更改。
版本回退
查看提交历史
在学习版本回退之前,先补充一下git log
指令的相关参数详解。
--oneline
参数可以查看历史记录的简洁版本。
![image-20220421160458412](https://image.icewindy.cn/202204211604452.png)
--graph
参数可以以拓扑图的形式,展示历史中出现的分支、合并。
--reverse
参数用于逆向显示日志。
--author=name
参数用于查询名为name
这个人的提交日志。
-<number>
参数可以显示近
版本回退
前面我们提及了一个撤销暂存区更改的命令git reset HEAD <file>
,实际上这个命令是版本回退命令的一个使用,现在我们来详解这个命令。
--hard
参数撤销工作区所有未提交的修改内容,将工作区与暂存区都回退到上一个版本。
HEAD
参数:
HEAD
表示当前版本HEAD^
表示上版本,以此类推,HEAD^^
表示上上个版本等等HEAD~0
表示当前版本HEAD~1
表示上个版本,以此类推,HEAD~50
表示上50个版本
![image-20220422162741046](https://image.icewindy.cn/202204221627089.png)
aabbcc
这个aabbcc代表的是版本唯一的标识码,我们可以用这个参数来指定回退到某以aabbcc作为版本唯一标识码的版本。
当我们后悔了,需要“回到未来”怎么办呢,我们可以用到git reflog
的命令,来查看你每一次的操作,并且获得操作的标识码,这样就可以获得某个版本的commit id
,也就是标识码了。
![image-20220422163214788](https://image.icewindy.cn/202204221632822.png)
![image-20220422162701602](https://image.icewindy.cn/202204221627655.png)
文件从本地仓库恢复
如果我们在工作区误删了文件,我们需要用到一个命令git checkout -- <file>
,这个命令可以帮助我们从本地仓库中恢复file
文件。
![image-20220422164852884](https://image.icewindy.cn/202204221648927.png)
文件删除
首先,我们可以在资源管理器中将工作区的文件删除,使用git status
就可以看到我们确实删除了一个文件。
![image-20220422165616423](https://image.icewindy.cn/202204221656455.png)
然后我们可以使用git rm <file>
的指令,确定删除该文件,接着我们用git commit
将我们这个更改上传至本地仓库,这样文件就在本地仓库被删除了。
![image-20220422170159105](https://image.icewindy.cn/202204221701131.png)