目录
Git了解
介绍
-
Git是目前世界上最先进的分布式文件版本控制系统(没有之一)
-
版本控制 所谓的版本控制就是将一组文件的改动记录下来,形成版本历史,以便需要时恢复
作用
- 代码共享
每位开发者可以使用Git将自己的代码上传到云服务器上,同时使用Git还可以将其他人上传的代码下载到自己的电脑上,这样就实现了代码共享
- 回溯版本
git除了保存代码,还对我们每次上传的代码进行备份。我们可以查询曾今提交过的每一个版本代码对应的内容,可以恢复到之前任意上传时间对应的状态
- 追踪信息
git提供了强制记录日志的功能,每次上传信息要求书写日志,可以记录本次上传的相关信息。比如写清楚本次上传的内容,对应的说明,等等。
Git基本理论知识
四个区域
git没有中央版本库,但是为了方便开发小组的成员们进行代码共享,我们通常会搭建一个远程的git仓库。和svn不同的是开发者本地也包含一个完成的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从。
- Workspace:工作区,就是你平时存放项目代码的地方
- 位置:一个文件夹通过git init 设置成一个git可以管理的文件夹时,这个文件夹里的内容(除去.git文件夹)就是工作区。
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- 英文叫 stage 或 index。是用来暂时存放工作区中修改的内容,可以理解为一个中转站。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
- 就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。就是工作区有一个隐藏目录 .git,它不算工作区,而是 Git 的版本库
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
- 托管代码的服务器,常用github、gitee、gitlab
Git分支
使用git保存代码并进行版本控制,但是一个团队所有人提交的版本信息汇聚到一起数量巨大,不利于管理。仅仅修改一小部分代码就进行版本提交,这样提交的版本价值不大。
但是我们提交版本也是为了方便管理自己的代码。怎样能提交自己专用的版本,不和项目核心代码掺和到一起?分支解决了这一问题
Git操作
本地操作-初始化工作区与提交代码
-
在使用git前需要告诉git你是谁,在向git仓库提交时会用得到
-
git config --global user.email ‘xxxx@qq.com’
- 配置提交者邮箱
-
git config --global user.name
- 配置提交者姓名
-
git config --list
- 查看git配置信息
-
-
初始化工作区
- git init
-
查看状态
- git status
- 红色代表当前没有提交到缓存区,绿色表示没有提交到本地仓库
- git status
-
工作区文件到暂存区
- git add 文件名
- 提交指定文件
- git add .
- 将工作目录中的文件全部添加到暂存区
- git add 文件名
-
暂存区提交到本地仓库
- git commit -m ‘第一次提交’
- -m 后面书写的是提交的备注信息,例如增删改查第几次提交
- git commit -m ‘第一次提交’
本地操作-差异比较
- 工作区与暂存区比较
- git diff 文件名
- 工作区与本地库比较
- git diff head 文件名
- 暂存区与本地库比较
- git diff --cached 文件名
本地操作-版本回退
-
查看当前提交日志
- git log
- HEAD-> master 标记当前分支的当前版本所在位置
- 在log中,每一个版本的前面,都有一长串随即数字: b44a10787c2b2bcc7ceb9c39cf06309065518d4b ,这是每次提交的commit id ,这是通过SHA1算法得到的值,Git通过这个唯一的id来区分每次提交
- git reflog
- git reflog与git log作用一样,但是git reflog提供的版本号更加简短
- git log
-
回退到之前版本
- git reset --hard head^
- 回归到上一个版本,Git通过HEAD来判断当前所在的版本位置。那么上一个版本,就用HEAD标示,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
- git reset --hard 版本号
- 回退到指定版本
- git reset --hard head^
本地操作-修改撤销
- 工作区撤销修改
- git checkout 文件名称
- 撤销工作区修改,我们撤销后,在查看文件中内容,发现工作区内容已经撤销,并查看状态,发现状态很干净
- git checkout 文件名称
- 暂存区撤销修改
- git reset HEAD 文件名称
- 撤销到工作区
- git reset HEAD 文件名称
分支操作-创建与切换
- 创建
- git branch 分支名
- 切换
- git checkout 分支名
分支操作-合并与删除
- 合并
- git merge 分支名
- 在某分支将指定分支合并,合并之后某分支上文件就发生相应改变
- git merge 分支名
- 删除
- git branch -d 分支名
- 使用git branch查看,发现指定分支已经被删除
- git branch -d 分支名
远程仓库操作-关联、拉取、推送、克隆
- 关联远程仓库命令
- git remote add origin 远程仓库地址
- 拉取:从远程仓库拉取到本地仓库
- git pull origin master --allow-unrelated-histories
- 首次拉取需要添加:–allow-unrelated-histories
- git pull 后续拉取
- 【注意】在推送代码前必须先拉取代码,否则无法推送本地仓库代码到码云仓库
- 在本地有版本库的情况下,从远程库获取最新commit 数据(如果有的话),并merge(合并)到本地。
- git pull origin master --allow-unrelated-histories
- 推送:本地仓库推送到码云仓库
- git push -u origin master
- 首次推送
- git push 后续推送
- git push -u origin master
- 克隆:
- git clone 远程仓库地址
- 是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程。
- git clone 远程仓库地址
扩展
GIT忽略清单
将不需要被git管理的文件名字添加到此文件中,在执行git命令的时候,git就会忽略这些文件。
文件名:.gitignore
# 此行为注释 会被Git忽略
# 忽略 node_modules/ 目录下所有的文件
node_modules
# 忽略所有.vscode结尾的文件
.vscode
# 忽略所有.md结尾的文件
*.md
# 但README.md 除外
!README.md
# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为txt文件
doc/**/*.txt