该文章持续更新中…


Git介绍

什么是Git

Git是一个开源的分布式版本控制系统。当我们在写代码的时候可能会出现多个版本的迭代,假如你写完两版代码后觉得第二版代码没有第一版好,但第一版代码已经被第二版给覆盖过去了。为了避免这个问题的出现,我们需要在写完一版代码后就对其进行备份(就像玩游戏时的存档)。但在本地备份时可能只是简单的将该项目的文件夹再复制出来一层,如果版本过多则可能需要占用很多的存储空间。Git就是将这个备份的过程程序化了,他会复制你的代码,让你随时可以退回到任何的一个版本。

区域概念

  • 工作区: 在电脑中的本地文件目录 (工作路径下除了.git的所有外的所有文件)

  • 暂存区: 英文名为stageindex。一般存放在.git目录下的index文件中,所以我们把暂存区也称为索引

  • 版本库: 工作区中有一个隐藏文件夹.git,这个就是Git的版本库

工作流程

Git一般工作流程如下:

  1. 先使用git clone克隆远程资源到本地作为工作目录
  2. 对工作目录下的文件增删改
  3. 如果远程修改了则需要同步远程内容,使用git pull就可以进行更新
  4. 修改了工作目录的文件后可以通过git status查看修改的文件,再将该文件添加到暂存区,再从暂存区添加到版本仓库
  5. 修改完成后如果不满意可以对其进行回退,修改满意后再将其提交到版本仓库
  6. 使用git pull将本地的修改推送到远程的git服务器中

Git基本命令

创建仓库

1
2
# 初始化仓库
git init

提交与修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 添加文件到暂存区
git add 文件名
# 提交暂存区到本地仓库
git commit -m "说明"
# 查看仓库当前状态,显示有变更的文件
git status
# 比较文件的不同,暂存区与工作区的差异
git diff
# 回退版本
git reset
# 删除工作区文件
git rm
# 移动或重命名工作区文件
git mv

提交日志

1
2
3
4
5
6
# 查看历史提交记录
git log
# 查看历史提交记录(简洁)
git log --pretty=oneline
# 以列表形式查看指定文件的历史修改记录
git blame 文件名

远程操作

1
2
3
4
5
git remote		  # 远程仓库操作
git fetch # 从远程获取代码库
git pull # 下载远程代码并合并
git push # 上传远程代码并合并
git colne # 复制一份远程仓库,就是下载一个项目到本地

分支管理

1
xxx

Git的基本使用

设置用户信息

设置全局用户信息

1
2
git config --global user.name "用户名"
git config --global user.email "邮箱地址"

创建版本库

当前的工作路径为D:\code\,通过初始化仓库后会在该路径下创建一个隐藏文件夹.git,该文件夹是Git用来跟踪管理版本用的,Git所需要的数据和资源都存放在这个目录下

1
2
git init
Initialized empty Git repository in D:/code/.git/

添加文件到版本库

在工作目录下创建一个文件readme.txt,文件内容如下: I am version 1,将工作目录下的文件readme.txt提交到暂存区中,命令执行成功后不会后反馈信息

1
git add readme.txt

查看仓库当前状态,显示有一个新文件

1
2
3
4
5
6
git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: readme.txt

将暂存区的文件提交到仓库中,再次查看仓库当前状态显示有一个文件已更改,一个文件插入

1
2
3
4
git commit -m "初始版本"
[master (root-commit) 1c6663f] 初始版本
1 file changed, 1 insertion(+)
create mode 100644 readme.txt

image-20211126194633263

修改文件

当前的文件内容为Im version 1,在该文件后添加一段内容Im version 2,再对比仓库中文件的差异。可以看到文件内容从Im version 1变成了I am vsersion 1 (换行) I am version 2

1
git diff readme.txt

image-20211126194735178

已经了解当前文件与上一版的差异,知道对该文件做了哪些修改后就可以放心的将该文件提交到仓库中,先添加到暂存区中,再添加到仓库中。或者直接执行git commit -a -m "备注"省去添加到暂存区的步骤

1
2
3
git commit -a -m "增加了I am verison 2"
[master 818026f] 增加了I am verison 2
1 file changed, 2 insertions(+), 1 deletion(-)

版本回退

上述已经对文件readme.txt进行了修改且提交到仓库中,继续往文件添加一行内容I am version 3,然后提交到仓库中

1
2
3
git commit -a -m "增加了I am verison 3"
[master c58b7c9] 增加了I am verison 3
1 file changed, 2 insertions(+), 1 deletion(-)

现在已经对文件readme.txt做了三次修改了,可以使用git log查看文件的修改记录(由近到远排序)。可以看到文件被修改的次数、时间、操作者、备注信息

1
2
3
4
5
# 列出细节
git log

# 每次修改以一行列出
git log --pretty=oneline

image-20211126195351518

image-20211126195642665

如果想让文件回退到上一个版本的内容,就可以使用reset命令来进行版本回退,这时候再查看内容就会发现readme.txt内容变成了I am version 1 (换行) I am version2。如果要回退到上上个版本的话就是HEAD^^,有几个^就回退几个版本。如果想要回退到前100个版本可以将命令修改为HEAD~100

1
git reset --hard HEAD^

image-20211126200803218

再次查看日志可以发现第三版的修改记录已经不见了

image-20211126201008947

如果想要再次回到第三版的话就需要查看一下所有的操作日志,可以在操作日志中看到每个版本的版本号,如初始版本的版本号为1c6663f

1
git reflog

image-20211126201438785

再通过指定版本号后就能回到对应的版本中

1
git reset --hard c58b7c9

image-20211126201802453

撤销修改

继续在readme.txt末尾添加一行文本I am version 4,添加完成后对刚添加的内容不满意想要回滚到没添加之前,可以将文件提交到仓库后再使用git restet --hard HEAD^回退到上一个版本,也可以使用下方命令直接撤回到添加文本之前(在没有推送到暂存区时使用)

1
git checkout readme.txt

image-20211127104430128

如果修改完后将文件提交到了暂存区,又对文件进行了修改,但还是不满意的话可以使用下方方法回退到暂存区的内容

继续在readme.txt末尾添加一行文本I am version 4,然后将其推送到暂存区中,在文件末尾继续添加一行I am version 5,现在想回到version 4就使用下方命令回退

1
git checkout -- readme.txt

image-20211127105448173

删除文件

在工作目录下添加一个文件test.txt,将该文件提交到仓库中。将文件test.txt删除,删除文件后如果想要恢复该文件可以使用版本回退来解决,或者使用checkout恢复该文件(在没有提交到版本库之前)

1
git checkout test.txt

image-20211127112618012

分支管理

远程仓库

Github

Gitee

Git服务器搭建

��