本文摘要
Git作为版本控制工具,使用非常广泛,在此咱们由浅入深,分三篇文章(Git基础、Git进阶、Gitlab搭那家)来深入学习Git
文章目录
- 本文摘要
- 1.Git仓库基本概念
- 1.1 远程仓库(Remote)
- 1.2 本地库(Repository)
- 2. Git仓库工作流程
- 3. Git常用命令
- 4. Git配置文件
- 4.1. 查看配置文件
- 4.2. 新增配置文件
- 4.3. 删除配置文件
- 5. .gitignore文件
- 5.1. 文件加载进暂存区
- 5.2. glob模式
- 5.3. 匹配示例
- 5.4. 定义全局忽略文件
- 5.5. 通用忽略文件
- 6.diff
- 6.1. 命令
- 6.2. 工作空间与暂存区
- 6.3.暂存区与版本库
- 6.4. 工作空间与版本库
- 6.5. 版本库与版本库
1.Git仓库基本概念
1.1 远程仓库(Remote)
即资源库,是远程服务器机器上的代码库,用于做不同版本库文件保存、更新。如Gitlab、GitHub、Gitee
1.2 本地库(Repository)
即用户在本地创建的目录,拥有远程库的一个快照,由工作区+版本库构成
- 工作区
项目根目录中除.git目录以外的内容,存储内容的实际文件 - 暂存区
也叫做缓存区,暂存信息存放在.git目录下的index文件中,即.git/index中,用于临时保存修改的内容 - 版本库(.git目录)
本地库的根目录中的一个隐藏目录.git,用于记录版本信息,git进行版本控制所需要的文件,都放在.git文件夹中
2. Git仓库工作流程
- 克隆远程库:从远程库上克隆完整的Git仓库(包括代码和版本信息)到本地;
- 在本地库上修改代码:在本地库上根据不同的开发目的,创建分支,修改代码;
- 提交到分支:在本地分支上提交代码;
- 把修改合并到本地主分支:在本地库上提交更新,也就是说,把修改合并到本地主分支;
- 把远程库合并到本地主分支:把远程库上的最新代码fetch下来,跟本地主分支合并,如果存在冲突,那么解决冲突。
- 把本地主分支提交到远程库:生成补丁(patch),把补丁发送给远程库。
3. Git常用命令
命令 | 作用 | 示例 |
---|---|---|
init | 初始化git项目 | git init |
status | 查看git中文件状态 | git status |
add | 将工作空间文件添加至git暂存区 | 单文件:git add filename 多文件: git add file1 file2 所有文件: git add . |
rm --cached | 将暂存区文件撤销回工作空间 | git rm --cached filename |
restore | 将暂存区文件撤销回工作空间 | git restore --staged filename |
commit | 将暂存区文件上传至git版本库 | git commit -m '提交注释' |
log | 查看git操作日志 | 显示所有日志:git log 简单显示日志: git log --pretty=oneline |
reset --hard HEAD^ | 1. 回退到上一个版本 2. 后边有几个^就表示回退到前边版本 3. 回退指定版本 | 1. 回退上一版本:git reset --hard HEAD^ 2. 回退上上版本:git reset --hard HEAD^^ 3. 回退至前10个版本:git reset --hard HEAD~10 |
reset --hard version | 回到至指定版本 | git reset --hard 996c |
git reflog | 回退撤销 | git reflog |
rm | 删除文件,文件从版本库移至暂存区,要完全删除,必须在执行commit | git rm filename |
4. Git配置文件
Git 配置主要分为三类:优先级:仓库级(local)>用户级(global)>系统级(system),对应的文件分别为:仓库级(.git/config)、用户级(~/.gitconfig)、系统级(/etc/gitconfig)
4.1. 查看配置文件
- 查看仓库级:git config --local -l
- 查看用户级:git config --global - l
- 查看系统级:git config --system -l
4.2. 新增配置文件
- 仓库级:git config --local user.name ‘zhangsan’
- 用户级:git config --global user.name ‘lisi’
- 系统级:git config --system user.name ‘wangwu’
4.3. 删除配置文件
- git config --global --unset user.name
5. .gitignore文件
5.1. 文件加载进暂存区
- 提交所有变化:git add -A
- 只提交修改、删除,不包括新建:git add -u
- 只提交新建、修改,不包括删除:git add .
5.2. glob模式
- “*”:匹配零个或多个任意字符
- []:匹配方括号中的字符,如[ab]匹配a或b
- ?:匹配任意一个字符
- [n-m]:匹配所有这个字符范围内的字符
5.3. 匹配示例
- logs/:忽略logs目录
- /logs.txt:忽略logs.txt文件
- *.class:忽略class结尾的文件
- !/classes/.class:不忽略classes目录下的class结尾文件
- tmp/*.txt:只忽略tmp目录下的txt结尾文件
- **/foo:可以忽略/foo,a/foo,a/b/foo等
5.4. 定义全局忽略文件
- git config --global core.excludesfile ~/.gitignore
5.5. 通用忽略文件
#java
*.class
#package file
*.war
*.ear
*.zip
*.tar.gz
*.rar
#maven ignore
target/
build/
#eclipse ignore
.settings/
.project
.classpatch
#Intellij idea
.idea/
/idea/
*.ipr
*.iml
*.iws
# temp file
*.log
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db
6.diff
diff:用于比较工作空间、暂存区、版本库中文件差异性
6.1. 命令
- git diff readme.txt
6.2. 工作空间与暂存区
$ git diff 1.txt
# a/1.txt:表示暂存区文件,b/1.txt:表示工作空间文件
diff --git a/1.txt b/1.txt
# 表示暂存区的版本
index 9a71f81..478d5b1 100644
--- a/1.txt
+++ b/1.txt
# -1:表示暂存区的行数,2:表示工作空间行数
@@ -1,2 +1,2 @@
hello world
-
# update workspace:表示工作空间增加了该行数据
+update workspace
6.3.暂存区与版本库
$ git diff --cached 1.txt
diff --git a/1.txt b/1.txt
index 9a71f81..478d5b1 100644
--- a/1.txt
+++ b/1.txt
@@ -1,2 +1,2 @@
hello world
-
+update workspace
6.4. 工作空间与版本库
# 指定要比较的版本号
$ git diff HEAD 1.txt
diff --git a/1.txt b/1.txt
index 9a71f81..f0bc050 100644
--- a/1.txt
+++ b/1.txt
@@ -1,2 +1,4 @@
hello world
+update workspace
+xxixixix
6.5. 版本库与版本库
# 指定要比较的两个版本号
$ git diff HEAD HEAD^
diff --git a/1.txt b/1.txt
index 478d5b1..9a71f81 100644
--- a/1.txt
+++ b/1.txt
@@ -1,2 +1,2 @@
hello world
-update workspace
+