版本控制工具具备的功能
1、协同修改
多人并行不悖的修改服务器的同一个文件
2、数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态
3、版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间。提高运行效率,这方面svn采用的是增量式管理的方式,而git采用了文件系统快照的方式。
4、权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核–git独有。
5、历史记录
查看修改人、修改时间、修改内容、日志信息
将本地文件恢复到某一历史状态。
6、分制管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
Git的优势
大部分操作在本地完成,不需要联网
完整性保证
尽可能添加数据而不是删除或者修改数据
分值操作非常快捷流畅
与linux命令全面兼容
git在本地的结构
本地库(历史版本)
/
|
git commit
/
|
暂存取(临时存储)
/
|
git add
/
|
工作区(写代码)
git和代码托管中心
代码托管中新(维护远程库)
在局域网环境下
gitlab服务器
在外网环境下
github
码云
本地库(团队内部)
远程库(跨团队协作)
本地库初始化
命令 git init 会生成 .git文件夹
注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。
设置签名
-
形式
用户名:tom
email地址:11111@qq.cpm -
作用:区分不同开发人员的身份
-
辨析:这里设置的签名和登陆远程库(代码托管中心)的账号、密码没有任何关系
-
命令
-
项目级别/仓库级别:仅在当前本地库范围有效
- git config user.name tom_pro
- git config user.email 11111_pro@qq.com
- 信息保存位置 .git/config下
-
系统用户级别:登陆当前操作系统的用户范围
- git config –global user.name tom_glb
- git config –global 11111_glb@qq.com
- 保存路径 ~/.gitconfig
-
优先级:
- 就近原则:项目级别优先于系统用户级别,二者都有时采取项目级别的签名
- 如果只有系统用户级别的签名,就以系统用户级别的签名为准
- 二者都没有不允许 -
基本操作
-
状态查看操作
- git status
- git status
-
添加操作
- git add filename
- git add filename
-
提交操作
- git commit -m “commit message” filename
- git commit -m “commit message” filename
-
查看历史操作记录
- git log
- git reflog 查看所有历史版本带有索引值
- git log
-
基于索引值操作
- git reset --hard 索引值
- 使用^后退只能后退
- git reset --hard HEAD(一个标识后退一步n个表示后退n步) - 使用~符号:只能后退
- git reset --hard HEAD~ n(表示后退n步)
- git reset --hard 索引值
-
reset 命令的三个参数对比
- –hard 在本地库移动HEAD指针,重置暂存区,重置工作区
- –soft 仅仅在本地库移动HEAD指针
- –mixed 在本地库移动HEAD指针,重置暂存区
-
-
永久删除后找回文件
-
删除文件 rm 文件名
-
使用 历史记录恢复 git reset --hard 索引值
-
-
比较文件
- git diff 文件名 若没指定文件名则把所有改过未提交的文件比较,已提交的文件不比较
- git diff 历史版本 文件名 历史版本的文件与这个文件相比较
- git diff 文件名 若没指定文件名则把所有改过未提交的文件比较,已提交的文件不比较
-
分支管理
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可
- 查看分支 git branch -v
- 创建分支 git branch 分支名
- 切换分支 git checkout 分支名
- 合并分支
- 第一步:切换到接收修改的分支(被合并,增加新内容)上 git checkout 被合并分支名
- 第二步:执行merge 命令 git merge 需要合并的分支名
-
解决冲突(当两个分支都对同一个文件进行修改合并时就会产生冲突)
- 编辑文件删除特殊符号
- 把文件修改到满意成功度保存退出
- git add 文件名
- git commit -m “日志信息” (注意不可以加具体文件名)
git 基本原理 - 哈希
哈希是一个系列的加密算法,各个不同的哈希爽啊虽然加密强度不同,但是有一下几个共同点
- 不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
- 哈希算法确定,输入数据确定,输入数据能够保证不变
- 哈希算法确定输入数据有变化,输出数据一定有变化,而且通常变化很大
- 哈希算法不可逆
git底层采用的是SHA-1算法
git&github
将github远程仓库地址保存到git中
git remote add 地址名 github远程仓库地址
git 推送到github远程仓库
错误修改git config --global http.sslVerify “false”
-在进行push时出现错误
git push github地址别名 推送的分支名
克隆
git clone github远程仓库地址
会把仓库里的内容全部clone下来
- 拉取
- pull=fetch+merge
- git fetch 远程库地址别名 远程分支名
- git merge 远程库地址别名/远程分支名
- git pull 远程库地址名 远程分支名
- 解决冲突
- 如果不是基于github远程库的最新版所做的修改,不能推送,必须先拉取
- 拉取下来之后如果进入冲突状态,则按照“分支冲突解决”操作解决即可