超详细Git版本控制及Git的使用

发布时间:2024年01月18日

目录

1.Git文件的三种状态与工作模式

1.1文件的三种状态

1.2Git项目的三个工作区域

1.3基本git工作流程

2.Git的使用

2.1Git使用SSH链接下载源码

2.2创建版本库并提交文件

2.2.1编写一个文本文件并将其提交到git仓库

2.2.2将项目提交到本地仓库

2.2.3提交文件到本地版本库

2.3文件的修改与提交

2.4暂存区文件的提交与撤销


?


?

1.Git文件的三种状态与工作模式

1.1文件的三种状态

????????使用git操作文件时,文件的状态有以下三种:

??????? 已提交(committed):已提交表示数据已经安全的保存在本地数据库中。

??????? 已修改(modified):已修改表示修改了文件,但还没保存到数据库中。

??????? 已暂存(staged):已暂存表示对一个已修改的当前版本做了标记,使之包含在下次提交的快照中。

1.2Git项目的三个工作区域

??????? 针对Git文件的三种状态,这里需要了解Git项目的三个工作区域:工作区、暂存区和Git仓库。

??????? 工作区:简单理解为在电脑里能看到的目录,比如自己创建的本地项目目录。

??????? 暂存区:Git的版本库里存了很多东西,其中最重要的就是stage(或者叫index)的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

??????? Git仓库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

1.3基本git工作流程

??????? 基本git工作流程描述如下:

??????? 1.在工作区中修改某些文件。

??????? 2.对修改后的文件进行快照,然后添加到暂存区。

??????? 3.提交更新,将保存在暂存区的文件快照永久转储到Git仓库中。

??????? 流程图如下:

19d7bb266d38423db41437e26c01ca0e.png

2.Git的使用

2.1Git使用SSH链接下载源码

??????? 以github为例:

040b6439d1274de293392d66c7442fd8.png

cd78aa103dfc4da88953f3aa80c7954d.png

????????GitLab和Gitee也大同小异。

2.2创建版本库并提交文件

??????? 版本库又名仓库,也可以理解为一个目录。这个目录里面所有的文件都可以被Git管理起来,每个文件的修改、删除,git都可以跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以进行还原。

2.2.1编写一个文本文件并将其提交到git仓库

??????? 1.自己选择合适的路径新建一个文件夹,用来存放需要上传的文件。右击此文件夹进入git Bash界面。

e669b14dbeb1483ca3c83a636edc7ca8.png

?????? 2 初始化git本地仓库,通过执行git init命令在本地初始化一个本地仓库,执行该命令后会在本地初始化一个没有任何文件的空仓库。

3ea279120227451e967d86d981d1bde8.png

??????? 3.执行完成后,文件夹内会多出一个.git文件夹。

9d66ee6a1c7042198811a9e60d80f2ad.png

??????? 4.新建文本文件git01.txt并添加到暂存区。文件内容如下:

265730864f0b494395f78d19cb072308.png

2.2.2将项目提交到本地仓库

?????? 1. 在.git同级目录下添加git01.txt文件后,使用git status查看工作区与暂存区文件状态。

????????git stsus命令用于显示工作目录和暂存区的状态。使用此命令能看到哪些修改被暂存到了,哪些没有,哪些文件没有被Git tracked到。

????????示例如下:

1e3cfc8e7d774fd9b47d7c64b61562e0.png

??????? 2.执行git add命令添加文件到暂存区。

??????? git add path 通常是通过git add <path>的形式把<path>添加到索引库中,<path>可以是目录。git不仅能判断出<path>中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它们的信息添加到索引库中。

??????? 示例如下:

2b6f542b75e745168e8885e26c8cd3f1.png

??????? 此时可以看到有一个git已tracked到新文件git01.txt,文件被成功存放到暂存区。

??????? 使用git rm --cached <file>命令可以把相应的文件从暂存区中移除,这里没有展示。

2.2.3提交文件到本地版本库

??????? 文件被添加到暂存区之后 ,执行git commit命令提交暂存区文件到本地版本库中。

??????? git commit命令用于将更改记录(提交)到存储库。将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。通常在执行提交时,在git commit命令后跟上-m属性,加入本次提交的记录说明,方便后续查看提交或改动记录。

??????? 示例如下:

04cccb8f1d7542b79f5e275e20668db7.png

??????? git log 命令用于显示提交日志信息。(时光穿梭时会经常使用该命令)。

??????? 示例如下:

b087a38309a6445fa2bb354b51a67293.png


_____________________________________________________________________________

(1月16日更新)

2.3文件的修改与提交

??????? 首先将上述文件git01.txt修改。

939e156aca9f41559ad7e9430cb31bb5.png

??????? 然后在Git Bash窗口中输入git status命令,发现文件git01.txt状态已经变成了已修改。

a55d405bda9d44e283594f1a919324b7.png

??????? 使用git add .将当前文件目录下的所有工作区文件保存至暂存区,命令如下:

aeaa5430c34040c8951ad3d607032e21.png

??????? 然后同样的使用git commit -m '第二次提交'即可提交到git仓库。

??????? 用git log命令查看提交的日志信息。

2c77d5d31aad43b7b853f3e34aa2eb9f.png

??????? 我们知道要想成功提交到git仓库,必须要经过一个暂存区,否则将提交不成功。倘若不经过暂存区,那么又将会发生什么?

??????? 首先再次修改git01.txt文件

9ef5ad23ff024af0af45598d93f4f8df.png

??????? 执行上述命令git status发现有一个已修改的文件,然后跳过暂存区直接执行Git commit -m '第三次修改'命令,发现没有任何变化。git01.txt仍然是已修改的状态。

826586e615364dd6a5d02968db51c406.png

??????? 此时,执行git diff HEAD -- git01.txt与版本库内容进行比较结果如下:

c85022b80bcb4964b9d340ae21257762.png

??????? 差异比较说明:

??????? '---':表示变动前的文件

??????? '+++':表示变动后的文件

??????? 变动的位置用两个@作为开始和结束(此例中变动之前即为从第一行开始连续两行,变动之后的即为从第一行开始连续三行)。

??????? 可以看出,文中第三行内容并没有提交到版本库中,原因在于修改后的git01.txt并没有添加到暂存区。所以执行提交操作并不会发生任何变化。

2.4暂存区文件的提交与撤销

??????? 当因失误而将文件添加到暂存区时,git支持文件的撤销操作,执行命令git reset HEAD <文件路径> (取消上一步操作)操作如下:

534bc4da6f0046888b6992e958df03a3.png

??????? 查看版本库状态并执行撤销操作:

??????? 其中撤销操作git restore --staged <file>(移除暂存区文件)和git reset HEAD <file>任选其一。

7da6b1e1cc86483f89ff9a0d17d2b7a5.png

fd3b150156b94ee7943a858382d7d109.png

再次查看版本库状态,test.txt成为未追踪文件:

655a68a1e7a548f2ae824ad5fb8da6c1.png

0df4260fa651440ba8bd3b9a28b56e79.png

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

文章来源:https://blog.csdn.net/m0_51755285/article/details/135598386
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。