GIT:分布式版本控制系统
版本控制系统
- GIT分布式控制系统
- SVG集中式版本控制
开发中我们把每一次的修改都有效的进行记录,形成一个版本。后期如果需要回退到某个版本,或者将当前的版本和某一个版本进行比较,都可以有效的进行管理。
分布式控制系统的特点
- 所谓分布式,就是每一个开发者本地客户端都是一个完整的仓库,都能记录历史版本信息,这样不用连网,也能生成版本记录,也可以快速回退到某个版本。
- GIT是按照源数据(文件流)来实现文件的传输,相比较SVG以文件传输更加快速。
- GIT命令大部分都是linux命令
linux命令
windows操作系统:DOS窗口和DOS命令 ;linux服务器操作系统:LINUX命令(MAC终端使用的也是LINUX命令)
ls -a/-l :查看当前目录结构,-a是查看所有的文件包含隐藏的文件
cd xxx[文件的路径] :进入到执行的文件(进入到路径地址,可以粘贴到对应的操作命令窗口)
cd / :根目录
cd ./:当前目录
cd ../:上级目录
clear:清屏
mkdir:创建文件夹
touch:创建空的文件
vi:向文件中插入或者管理一些内容
i=>进入到插入模式
ESC + :WQ :退出内容的插入模式,把刚才编辑内容进行保存(:输入你要写的内容 W:write Q:quit 写入并提出)
echo:向指定的文件中输入内容,如果没有该文件则同时创建该文件并写入内容,输入覆盖式
echo xxx > xxx.xxx
cat:查看文件内容
cp:拷贝
rm:删除文件 -r(递归删除) -f(强制删除) 一旦删除无法还原
GIT的常规流程
- 每一个GIT仓库都有三个存储代码的地方
- 工作区:编写代码的文件夹
- 暂存区:暂时存储每一次修改并提交的后的代码,但是并没有生成历史版本,只能获取到最新最后一次提交的版本
- 历史区:存放所有的历史版本(每次提交到历史区就能形成历史版本)
注意: 每一次区域间的提交,都不会删除原有的区域中的内容,这样保证在下一次提交,通过对比,把最新的更改提交上去即可;
- 创建一个仓库
$ git init
- 提交到暂存区
$ git add -A/.
- 提交到历史区
$ git commit xxx(不指定的话整体提交) -m '注释'
- 查看各个区的提交情况
$ git status
- 红色文件代表在工作区
- 绿色文件代表在暂存区
- 没有文件表示都已经提交到历史区
- 清空当前git窗口
$ clear
- 把暂存区的某一个文件删除(需求不是很多)
$ git rm --cached xxx
$ git rm --cached . -r
删除暂存区中提交的
注意: 如果在删除的时候发现,该文件在工作区中已经被修改,则需要添加 -f 才能强制从暂存区中删除
- 基于上次重新开发,将提交暂存区的历史记录覆盖当前工作区的内容
$ git checkout xxx.xxx
- 查看每个区的区别
$ git diff
列出所有的差异$ git diff <file>
工作区VS暂存区$ git diff master
工作区VS历史区master分支$ git diff --cached
暂存区VS历史区
细节处理
- 第一次使用GIT,生成历史版本的时候,需要提供身份认证
在本地GIT全局环境下
$ git config -l
$ git config --global user.name 'z先森'
$ git config --global user.email 'zZ@163.com'
- 提交的时候忽略一些文件(和项目没关系,还有文件太大)的提交
.gitignore:只有后缀名的文件,GTI提交所有忽略的文件清单
# dependencies
node_modules
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# webStorm
.idea
- 查看提交到历史区的记录
$ git log
- 查看提交到历史区以及回滚的记录
$ git reflog
代码回滚操作
$ git checkout .
将暂存区的内容回滚到工作区,一旦回滚,工作区的内容无法恢复$ git reset HEAD .
将当前暂存区的内容回滚到上一个暂存区,目的是把上一个暂存区回滚到工作区$ git reset --hard 版本号
在历史区中回退到某一个版本,强制把暂存区和工作区的内容都变成该版本$ history > 1.txt
将所有历史操作信息输出到1.txt
团队协作开发
- 创建中央仓库: 基于github或者coding最好不要创建空仓库
- 建立客户端本地仓库
origin 起的连接的名字
$ git remote add origin git仓库地址
让本地仓库和远程仓库进行关联,这样才可以实现信息的同步$ git remote -v
查看是否连接成功- 把所有协同开发人员都列入仓库的开发群组中,后期可以用自己的github账号对仓库进行相应的操作
- 也可以用同一个账号,然后在本地配置和账号相同的用户名和邮箱
$ git remote rm origin
移除本地仓库和远程仓库的连接$ git remote update origin
更新链接通道
- 一步到位-克隆:
$ git clone "远程仓库地址" "本地仓库文件夹名字"
只要把远程仓库克隆到本地,就相当于在本地创建了仓库,而且自动建立了链接,并把远程仓库的内容克隆到本地。 - 拉取仓库内容:
$ git pull origin master
把远程仓库master信息同步到本地master分支上 - 把开发好的代码推送到仓库:
$ git push origin master
冲突处理
- 无分支管理模式
- 不是同一行代码的冲突,通过命令行提示操作
:i + ESC + : + WQ
- 同一行代码冲突,需要手动把代码进行合并
- 不是同一行代码的冲突,通过命令行提示操作
- 分支管理模式:分支指的是历史区的分支,创建分支就是创建不同的线路,来管理历史版本
- 将远程的master的内容拉取到本地master上,每个开发人员在本地创建自己的分支来进行切换和合并
$ git branch
查看当前的分支,*代表在哪个分支上$ git branch dev
创建一个dev的分支,创建完成会把本地的master分支内容同步到新创建的分支上。$ git branch -D xxx
:删除某分支$ git checkout dev
:切换到dev分支上$ git checkout -b dev
:上述俩步的简写,创建并切换到dev分支$ git merge xxx
:在该分支下合并某分支$ git stash/$ git stash pop
:在切换分支的时候,有一部分信息并没有提交称为历史版本,为了防止信息的丢失,先使用stash保存,然后再基于stash pop还原。