一、 版本控制
版本控制可以帮助程序员进行代码的追踪、维护、控制等一系列操作。
最权威的资料——Git官网:https://git-scm.com/doc
1.1 集中式版本控制
集中式版本控制(Centralized Version Control Systems, 简称CVCS )的特点:
- 采用一个集中管理的服务器,保存所有文件的修订版本
- 问题是:中央服务器不能出现故障
- 如果服务器宕机,那么谁都无法提交更新,也就无法协同工作。
- 如果中心数据库发生损坏,没有备份的话,将丢失关键数据
1.2 分布式版本控制
Git属于分布式版本控制系统 (Distributed Version Control System, 简称DVCS):
- 客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下
来,包括完整的历史记录; - 任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复;
(因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份)
二、 Git的安装及配置
2.1 安装
- git官网下载:https://git-scm.com/
- 淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows
Git安装的几个工具
Git在安装时,也会安装如下几个工具,这几个工具的作用都是为了运行git命令。
-
Git Bash(推荐):就是一个shell,可执行Linux的命令行。GitBash是基于CMD的,在CMD的基础上增添一些新的命令;
-
Git CMD:命令行提示符(CMD)是Windows操作系统上的,Git CMD就是对其的进一步封装,就看做是Window上的CMD;
-
Git GUI:提供了一个图形用户界面来运行git命令
(设置环境变量是为了全局使用,而git可以在任何地方右击选择Git Bash使用,所以配或不配没啥大区别)
常用Linux命令
cd
:改变目录cd..
:回退到上一个目录,直接cd进入默认目录pwd
: 显示当前所在的目录路径Is
:都是列出当前目录中的所有文件touch
:新建一个文件 比如 touch index.jsrm
: 删除一个文件 rm index.jsmkdir
: 新建一个目录,即新建一个文件夹rm -r
:删除一个文件夹 如 rm -r src 删除src目录mv
:移动文件,mv index.html --将index.js移动到src文件夹,这样写必须保证文件和目标文件夹在同一目录下reset
: 重新初始化终端清屏clear
:清屏history
:查看历史命令help
:帮助exit
:退出#
:注释
2.2 Git的配置
(1) 设置用户名和邮件地址(重要)
每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改;如果使用了 --global
选项,那么该命令只需要运行一次。
- 设置用户名
git config-global user.name 'lxh'
git config-global user.email '邮箱地址@qq.com'
(2) 配置别名(可配可不配)
如果不想每次都输入完整的Git命令,可以为某些命令设置一个别名
$git config --global alias.br branch
$git config --global alias.ci commit
$git config --global alias.st status
别名的使用:
2.2 查看配置
- 查看系统配置(系统给配置的东西)
git config --system --list
- 查看本地配置(用户自己配置的)
git config --global --list
- 查看配置所有配置(系统配置+本地配置)
git config -l
三、 Git基本理论
3.1 工作区域
- Workspace : 工作区,即平时存放项目代码的地方(项目文件)
- Stage/Index:暂存(暂缓)区,用于临时存放你的改动,事实上他只是一个文件,保存即将提交到文件列表信息
- Repository:仓库区(或
本地仓库
),即安全存放数据的位置,这里面有提交到所有版本的数据。其中HEAD指向最新放入仓库的版本 - Remote:
远程仓库
,托管代码的服务器(比如Gitee)。
3.2 文件状态
对文件划分不同的状态,以确定这个文件是否已经归于Git仓库的管理
- 未跟踪(Untracked):并未加入git库中,通过
git add
状态变为Staged
- 已跟踪:添加到Git仓库管理的文件处于已跟踪状态,已跟踪状态的文件又可细分为以下几个状态
- Unmodifed:未修改状态;文件已提交到git仓库,且为修改
- Modified:文件已修改,但并未进行其他操作
- Statged:暂存状态
查看文件状态
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
# 查看更简洁的状态信息
git status -s
简洁信息 ,左侧表示暂存区状态,右侧表示工作区的状态:
四、Git项目的搭建与操作
可将VSCode的默认终端设置为bash,这样每次打开终端都是bash
4.1 初始化Git仓库
在创建一个新项目时,需要初始化本地仓库;(很多脚手架在创建项目时都会默认创建一个Git仓库)
$ git init
Initialized empty Git repository in xxxx
git init
命令将创建一个名为.git的子目录,含有Git仓库所必须的文件
4.2 常见的操作
4.2.1 文件添加到暂存区
- 跟踪新文件(将新文件添加到暂存区)
git add 文件名
- 如果已经跟踪了一个文件,该文件修改之后处于
modified
状态。也需要重新添加到暂存区 - 将当前目录的所有文件添加到暂存区(
.
是当前目录的意思)git add .
4.2.2 文件提交更新
git commit
将暂存区的所有文件提交到本地仓库中;(建议在提交之前,先用git status
检查是否所需文件都在暂存区)- 提交信息时,写上参数
-m
来备注提交信息git commit -m '提交信息'
git commot 文件名 -m '提交信息'
,提交某个单独的文件
- 添加到暂存区,提交到仓库,两个命令可以用一行来代替
git commit -a -m '提交信息'
- 等价于
git add .
+git commit -m '提交信息'
4.2.3 查看历史提交记录
git log
查看历史提交记录,在不传入任何参数的默认情况下,git log会按时间先后顺序列出所有的提交,最近的更新排在最上面。
# 简单打印历史记录
git log --pretty=oneline
# 以图的方式打印历史记录
git log --pretty=oneline --graph
前边黄色的一大长串的字符是校验和,每次提交生成的校验和是不一样的,也被称做commit ID,用来标识每次的提交。
4.2.4 版本回退
Git通过HEAD指针记录当前版本,HEAD总是指向该分支上的最后一次提交。我们可以通过HEAD来改变Git目前的版本指向;
- 通过HEAD改变Git版本的方式
git reset --hard HEAD^ // 回退到上一个版本
git reset --hard HEAD~1000 // 回退到上1000个版本
git reset