(1)git要完成的功能
提供一种方式,完成多人访问情况下对文件的版本进行管理。可分布式、可离线、可在线使用。
具体功能:版本库文件的提交、下拉、删除、比对,上传到云端库等。
(2)git的日常操作
git客户端安装
参照完成,此处不再赘述
(a)找一个存放工程的文件夹,打开git控制台,执行git init初始化git的repository
执行命令:git init
(b)执行git clone、git remote add,从git云端库下拉版本库中的文件并配置云端仓库
执行命令:
git clone 云仓库地址,例如:http://xxxx@192.168.1.5:8080/r/GZProject.git
git remote add origin 云仓库地址,例如:http://xxxx@192.168.1.5:8080/r/GZProject.git
备注:
(1) 这里是两条语句
第一条是从云仓库克隆,也可以直接从云仓库下
第二条是添加一个云端仓库指向,别名为origin,仓库地址为http://xxxx@192.168.1.5:8080/r/GZProject.git
(2) git clone的参数内容从git仓库处复制
(c)编写gitignore文件
具体规则可参照git官方文档或者完成。
(d)git add 提交文件到stage缓存区
执行命令:git add ./*
这里添加的是当前的所有文件,可以一个个添加,也可以git add完再用git rm 去删
(e)git pull 从远端仓库拉取有变更的文件并合并到工作区
执行命令:git pull http://xxxx@192.168.1.5:8080/r/GZProject.git master
(f)git diff 比对差异(默认比对工作区与stage)
(g)合并所有冲突
(h)git commit提交到本地仓库
执行命令:git commit -m '一段对当前版本说明的文字'
(i)git push 提交到云端仓库
执行命令:git push origin master
将向origin仓库推送本地master分支
(3)git的基本概念
(a)git三大存储区:repository、stage、workspace
Repository:仓库,此处指的是本地仓库。即相当于本地正式库。在离线的情况下,使用者可以通过本地仓库保存当前有效的文件变化。
Stage:暂存区,也有人叫Index区。是用于暂存当前修改的类似于临时保存的区域。比如:当前要执行一个比较大批量的合并操作,合并完成之前,就需要有一个副本时常与当前版本进行比较,而stage,就是离线情况下专门用来干这个的。
Workspance:工作区,就是git init执行时所在的文件夹,是工程存储的、在磁盘上可见的文件夹的内容。
(b)HEAD文件指针
HEAD指针是指向当前最新版本的文件指针(并非一定是本地仓库)。例如:git reset命令会导致其移动至stage区。
二、更多强大功能
(1)git log 查看本地仓库提交日志查询
执行命令:git log
这个命令可以用于查找git仓库当前提交的版本,配合git reset命令可以用于回滚本地仓库的提交。
(2)git reset 操作HEAD指针(版本回退)
执行命令:git reset HEAD或者git reset HEAD --mixed
当前stage区内容会被HEAD指向的本地仓库中的文件版本覆盖
执行命令:git reset HEAD~2 --hard
当前stage区、工作区内容会被HEAD指向的本地仓库中的文件版本的往回数两个版本覆盖。
执行命令:git reset HEAD~ --soft
本地仓库中HEAD指针往前移动一个版本,相当于撤销一次git commit操作
(3)git status 查看当前文件情况,常用于合并操作
查看当前工作区和暂存区的状态,即:哪些内容被提交到缓存区了,哪些没有,差异性什么的。
执行命令:git checkout ./
当前目录下(./)的所有内容将以stage区的内容进行覆盖
(4)git fsck --lost-found找回git add过但已经不存在的文件
(5)git rm 删除文件
执行命令:git rm ./
在git中删除以提交的文件(只是删除工作区和stage区的文件,要删除仓库里的,要提交才行)
(6)创建与切换分支
执行命令:git branch feature
以当前本地仓库中HEAD指针指向的版本创建一个名为feature的版本分支。
执行命令:git log –decorate
查看当前版本与分支以及标签情况
执行命令:Git checkout feature
本地仓库中的HEAD指针指向名为feature的版本分支,并将HEAD指向的内容还原到工作区。
执行命令:git log –oneline –decorate –graph –all
图形化显示分支情况、版本迭代情况
(7)合并与删除分支
执行命令:git merge feature
将feature分支合并到当前HEAD指向的分支(不知道自己当前在哪个分支的,可以使用git log命令查看)
执行命令:git status
查看冲突文件,用编辑器或其他编辑工具修改、合并冲突。
执行命令:git add
将合并完的内容提交到stage区(此处为简写,有多少改多少,改多少提交多少)
执行命令:git commit
将stage区的内容提交到本地仓库
处理完所有冲突,再次执行git merge,分支就会被合并到master里了,但feature不会被删除
执行命令:git branch –delete feature
删除git 分支feature
(8)匿名分支与git checkout命令
git branch:查看本地分支
git branch –r :查看云仓库分支
git checkout 分支名:将当前工作区内容检出为分支指向分支版本(会直接丢弃当前工作区文件,文件指针也会跟着移动)。
git checkout :创建一个匿名分支,可以用于实验。若发现实验需要保存,可以用git branch –b 重新指定名称
(9)git checkout与git reset的区别:
(a)当操作对象是一个文件时,git reset只能将指定文件覆盖stage区域(若用—文件名指定文件,则不能使用—mix以外的选项)。而git checkout是一定会将文件覆盖stage区和工作目录的。
(b)当操作对象是一个版本快照时,git reset –hard会直接覆盖掉工作目录和stage区,比较危险。用git checkout ,如果当前工作区有什么没有提交到stage,即git status还有东西返回,checkout就会失败,一定要你提交完内容再checkout
(c)git reset用于重置分支,相当于将当前HEAD指向的文件快照直接修改,即是:如果当前指向feature分支,执行git reset master –hard,那么feature分支内容将直接变成master分支的内容,同时文件指针也会指过去,相当于丢弃了一个快照。而checkout只是将HEAD指针指过去,feature分支该咋样还是咋样,只是HEAD指向master了而已。