git 学习(长期)
Git
背景
最经换电脑了,电脑里的东西全得转移,真的麻烦,搞这个博客就花了好长时间来 git,借此机会想来学习一下 git 相关知识,慢慢学。
版本控制系统
集中式版本控制系统:
集中式的版本控制系统,所有的版本库是放在中央服务器中的,也就是说我们每一次的修改上传都是保存在中央服务器中的。中央服务器就是个大仓库,大家把产品都堆里面,每一次需要改进和完善的时候,需要去仓库里面把文件给提出来,然后再操作。
但是有缺点,如果主服务器出现了问题,所有人就无法上传或下载,而且会有延迟,可能下载下来的版本不是最新的。
分布式版本控制系统:
分布的含义不是说每台计算机上只留有版本库的一部分。恰恰相反,分布的含义是每台计算机上都还有一个完整的版本库。这个时候,你的修改仅仅需要提交给本地的版本库进行保存就可以了。而 Git 就是一个优秀分布式版本控制系统。
新建仓库
一共有两种,第一种就是直接在自己本地电脑上新建一个,第二种就是从远程服务器克隆一个仓库。
方式一:git init
方式二:git clone
不管是哪样,都会在本地文件夹中生成一个 .git
目录,这个目录中存放着许多有关git信息的重要文件。
Git 的工作区域和文件状态
本地的数据管理:
- 工作区(Working Diretctory).git 所在的目录,就是你在电脑里能看到的目录
- 暂存区(Staging Area/Index).git/index,一般存放在 .git 目录下的 index 文件
- 本地仓库(Local Repository).git/objects
文件也分几种状态:
未追踪(Untrack)
未修改(Unmodified)
已修改(Modified)
已暂存(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 协议 ,转载请注明出处!