git 学习(长期)

Git

背景

最经换电脑了,电脑里的东西全得转移,真的麻烦,搞这个博客就花了好长时间来 git,借此机会想来学习一下 git 相关知识,慢慢学。

版本控制系统

  1. 集中式版本控制系统:

    集中式的版本控制系统,所有的版本库是放在中央服务器中的,也就是说我们每一次的修改上传都是保存在中央服务器中的。中央服务器就是个大仓库,大家把产品都堆里面,每一次需要改进和完善的时候,需要去仓库里面把文件给提出来,然后再操作。

    但是有缺点,如果主服务器出现了问题,所有人就无法上传或下载,而且会有延迟,可能下载下来的版本不是最新的。

  2. 分布式版本控制系统:
    分布的含义不是说每台计算机上只留有版本库的一部分。恰恰相反,分布的含义是每台计算机上都还有一个完整的版本库。这个时候,你的修改仅仅需要提交给本地的版本库进行保存就可以了。

    而 Git 就是一个优秀分布式版本控制系统。

新建仓库

一共有两种,第一种就是直接在自己本地电脑上新建一个,第二种就是从远程服务器克隆一个仓库。

方式一:git init

方式二:git clone

不管是哪样,都会在本地文件夹中生成一个 .git 目录,这个目录中存放着许多有关git信息的重要文件。

Git 的工作区域和文件状态

本地的数据管理:

  1. 工作区(Working Diretctory).git 所在的目录,就是你在电脑里能看到的目录
  2. 暂存区(Staging Area/Index).git/index,一般存放在 .git 目录下的 index 文件
  3. 本地仓库(Local Repository).git/objects

文件也分几种状态:

  1. 未追踪(Untrack)

  2. 未修改(Unmodified)

  3. 已修改(Modified)

  4. 已暂存(Staged)

git add 能直接将 Untrack 变成 Staged,git rm 将 Unmodified 变成 Untrack。

添加和提交文件

git status 查看仓库的状态

git add 添加到暂存区:可以使用通配符,也可以用.代表当前文件夹

git commit 提交:只提交暂存区中的内容,不会提交工作区中的内容

git log 查看仓库提交历史记录;可以使用 --oneline 来查看简洁的提交记录

git reset 回退版本

有三种:

git reset --soft:工作区保留,暂存区保留

git reset --hard:工作区与暂存区都不保留

git reset --mixed:工作区保留,暂存区不保留

git diff 查看差异

git diff 比较工作区与暂存区的差异

git diff HEAD 比较工作区与本地仓库之间的差异

git diff --cached/--staged 比较暂存区与本地仓库之间的差异

git diff HEAD~<number> HEAD 比较提交之间的差异

git diff <branch_name> <bracnch_name> 比较分支之间的差异

git rm 删除文件

rm file;git add file 先从工作区中删除文件,然后再暂存删除内容

git rm <file> 把文件从工作区和暂存区中同时删除

git rm --cached <file> 把文件从暂存区删除,但保留在当前工作区中

git rm -r * 递归删除某个目录下的所有子目录和文件

删除后不要忘记提交

.gitignore 文件

所有被忽略的文件都会被保存在一个 .gitignore 文件中。

.gitignore 文件是一个纯文本文件,包含了项目中所有指定的文件和文件夹的列表,这些文件和文件夹是 Git 应该忽略和不追踪的。

在 .gitignore 中,你可以通过提及特定文件或文件夹的名称或模式来告诉 Git 只忽略一个文件或一个文件夹。你也可以用同样的方法告诉 Git 忽略多个文件或文件夹。

.gitignore文件的匹配规则:

  • 空行或者以 # 开头的行会被Git忽略。一般空行用于可读性的分隔,# 一般用作注释
  • 使用标准的Blob模式匹配,例如:
    • 星号 * 通配任意个字符
    • 问号 ? 匹配单个字符
    • 中括号 [] 表示匹配列表中的单个字符,比如:[abc] 表示 a/b/c
  • 两个星号 ** 表示匹配任意的中间目录
  • 中括号可以使用短中线连接,比如:
    • [0-9] 表示任意一位数字,[a-z] 表示任意一位小写字母
  • 感叹号 ! 表示取反

SSH 配置和克隆仓库

…… 未完待续


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!