1.git基础
1.1 VCS出现之前
- 用目录拷贝区别不同版本
- 公共文件容易被覆盖
- 成员沟通成本高,代码集成效率低下
1.2 集中式VCS
- 有一个集中的那么版本管理服务器
- 具备文件版本管理和分支管理的能力
- 集成效率有明显的提高
- 客户端必须时刻和服务器相连
1.3 分布式VCS
- 服务端和客户端都有完整的版本库
- 脱离服务端,客户端照样可以去管理版本
- 查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VCS更能提高版本管理效率
1.4安装git
- linux安装步骤
- windows安装步骤
- 查看是否安装成功
git --version
1.5 git最小配置
- 配置user信息
配置user.name和user.email
#目的是为了记录每次的变更,以便秋后算账
#如果忘记设置,后期会提示进行这个设置
git config --global user.name 'yuzhou'
git config --global user.email 'yuzhou3996@gmail.com'
#git config --global 表示对当前用户的所有仓库有效(常用)
#git config --local 表示只对某个仓库有效(常用)
#git config --system 表示对系统所有登录的账户有效(不常用)
#local的优先级高于global
#显示config的配置,加上 --list
git config --local --list
#想查看那个信息
git config --local user.name
1.6 建git仓库
- 两种场景
1.把已有的项目代码纳入git管理
cd 项目代码所在的文件夹
git init
2.新建的项目直接用git管理
cd 某个文件夹
git init your_project #会在当前路径下创建和项目名称同名的文件夹
cd your_project
1.7 git暂存区概念
- 相关命令
#1.查看当前管理状态的命令
git status
#2.将文件提交到暂存区
git add 文件/文件夹
git -u 表示将git已经管理过的文件提交到暂存区
#3.向仓库进行提交
git commit
git -m '此次提交的注释'
git -am '此次提交的注释' #表示工作区的直接提交到版本库
#4.查看相关提交日志信息
git log
1.8 重命名文件
- 如果直接对源文件进行重命名
- 提示我们需要将git仓库之前被管理的read进行删除
#删除仓库的文件
git rm 旧文件名
git add 新文件名
- 但是这样步骤繁琐
#用一条命令完成对以上的替代
git mv 旧文件名 新文件名
1.9 查看git的版本历史
- 命令行方式
git log --oneline #简洁的查看git的变更历史
git log -n4 --oneline #简洁的查看git最近4次的变更历史
git log --all 列出所有分支对应的版本信息
git log --all --graph 图形化的方式列出所有分支对应的版本信息
- 图形界面的方式
命令行下输入 gitk 命令
1.10 .git目录详解
git checkout 分支名称 #表示切换到新分支
git checkout -b 分支名称 #表示创建分支并切换到此分支
git branch 分支名称 #表示创建新分支
- HEAD文件
表示当前处于哪个分支,指向refs文件夹下的具体分支
- config文件
包含用户名以及邮箱
- refs文件夹
tags表示标签
heads表示所有分支(相当于一个独立的开发空间)
- objects文件夹
其中的文件夹名称与其下的文件名称共同组成一个哈希值
这个哈希值是一个 tree 对象(commit 也属于一个对象)
这个 tree 里面存储了我们源文件以及源文件对应的哈希值
查看 tree 的内容再次发现一个新的对象 blob(文件)
三种对象 blob commit tree
1.11 commit blob tree三个对象的关系
- 一个commit对应一个tree
- 每次提交的一个commit相当于提交了一个文件夹以及一堆相关信息
- 一个tree算作一个文件夹
- tree下面还可以包含tree
- 不同文件名的相同内容文件只算一个blob
1.12 分离头指针
木听懂
1.13 HEAD 与 branch
#以下所指的哈希值不用全部复制,前面几位即可,只要能保证唯一性
git cat-file -t 哈希值 #查看这个哈希值指代的类型
git cat-file -p 哈希值 #查看这个哈希值指代的内容
git diff 哈希值 哈希值 #比较两次commit的不同
git diff HEAD HEAD^1
#表示对比上一次commit与上一次commit的父亲的差异
HEAD^1^1 #代表上两次
HEAD^^ #代表上两次
HEAD~2 #代表上两次
了解更多技术文章,欢迎关注我的个人公众号