版本控制系统(Version Control System)简称VCS,是一种记录若干文件内容变化的系统,其可对任意类型的文件进行管理(流文件不记录改动内容,仅记录大小变化)
集中式版本控制系统(CVCS)的代表为SVN、分布式版本控制系统(DVCS)的代表为Git
Git介绍
Git官网:Git是最先进的DVCS,其跨平台支持Windows、Linux和MacOS
git --version # 查看git版本(安装方式见Git官网)
>>>git工作原理<<<
工作区:存放被管理文件的项目目录 远程仓库
↓ 追踪文件 提交文件 ↑ push
暂存区:临时存放被修改文件的区域 ---------> git本地仓库:用于存放提交记录
Git配置
1.初始配置
配置文件(.gitconfig):位于当前所使用的系统用户的用户根目录下
# 配置/修改提交人姓名
git config [--global] user.name <user_name>
# 配置/修改提交人邮箱
git config [--global] user.email <user_email>
# 查看git配置信息
git config --list
2.仓库构建
说明:仓库初始化后会自动在当前目录下生成一个隐藏文件夹(.git目录)
# 初始化git本地仓库
git init
3.忽略清单
忽略清单:执行Git命令时会自动忽略清单文件中指定的文件/目录
# 在项目根目录下创建忽略清单文件(.gitignore)
touch .gitignore
# 向忽略清单文件添加不需要被管理的文件名和目录名
vi .gitignore
1 node_modules
2 test.html
~
项目目录结构
|- .git ==================================== 本地仓库
|- .gitignore ============================== 忽略清单
Git使用
1.提交命令
# 查看文件状态
git status
# 追踪文件(将工作区文件提交到暂存区)
git add <file_list>
# 提交文件(将暂存区文件提交到git本地仓库)
git commit -m <commit_message>
# 查看历史提交记录
git log
2.撤销命令
# 撤销工作区文件的修改(用暂存区文件覆盖工作区文件)
git checkout <file_name>
# 删除暂存区文件(不删除工作区同名文件)
git rm --cached <file_name>
# 清空暂存区、工作区的内容和提交记录,然后使用git仓库中的内容覆盖暂存区、工作区和提交记录的内容
git reset --hard <commitID>
3.分支管理
Git分支类似于时间线,每条提交记录都是分支上的一个时间节点,且分支间互不影响
主分支(master):首次向git仓库中提交更新记录时自动产生的一个分支,用于生产使用
开发分支(develop):基于主分支上某一时间节点创建的分支,用于开发使用
功能分支(feature):基于开发分支上某一时间节点创建的分支,作为开发具体功能的分支
# 查看分支(当前分支的名称前带有"*")
git branch
# 创建分支(在当前分支上创建新分支)
git branch <new_branch_name>
# 切换分支(切换分支时必须保证暂存区为空)
git checkout <target_branch_name>
# 合并分支(需先切换到待合并分支的父分支上)
git merge <child_branch_name>
# 删除分支(分支被合并后才允许删除,强制删除请将参数"-d"改为"-D")
git branch -d <branch_name>
# 快捷方法
git checkout -b <new_branch_name> # 在当前分支上创建新分支并切换到新分支上
4.暂存更改
说明:暂存更改机制独立于分支,恢复改动时应看准分支,否则会将临时存储的内容保存到其他分支上
# 存储临时改动(会清空缓存区)
git stash
# 查看临时存储列表
git stash list
# 恢复改动(适用于临时存储的分支只有一个时)
git stash pop
# 恢复改动(适用于临时存储的分支为多个时,将指定的内容恢复到当前分支)
git stash apply stash@{...}
Git托管
1.配置远程仓库
说明:常用代码托管仓库有Github(国外)、Gitlab(国外)、Gitee(国内),操控远程仓库的方法一般有两种,第一种为HTTP地址(可直接使用,但每次提交需手动提交),第二种为SSH地址(需先配置密钥,每次提交会免密登录,配置方法如下)
# 通过Git命令生成密钥文件(输入如下命令后回车3次即可)
ssh-keygen
# 将生成的位于当前用户根目录下的".ssh"目录下的公钥文件(id_rsa.pub)内容添加到远程仓库的SSH and GPG keys中,私钥文件不动
2.远程仓库命令
说明:当两个提交请求修改了同一文件的同一内容时会出现提交冲突问题,此时需手动修改
# 为远程仓库地址指定别名(HTTP仓库地址)
git remote add <another_name> <address_url>
# 将远程仓库克隆到本地(本地可无仓库)
git clone <another_name | address_url>
# 将远程仓库最新内容同步到本地仓库(本地需有同名仓库)
git pull <another_name | address_url> <branch_name>
# 向远程仓库推送(指定参数"-u"后会自动记录提交地址和分支,下次提交时直接使用"git push"即可)
git push [-u] <another_name | address_url> <branch_name>
# 向远程仓库推送新分支(需先切换到被推送的分支)
git push [-u] origin <this_branch_name>