Git Note
版本控制工具应该具备的功能
协同修改
- 多人并行不悖的修改服务器端的同一个文件
数据备份
- 不仅是保~~~~存当前状态,还能够保存每一个提交过的历史状态
版本管理
- SVN采用的是增量式管理的方式
- Git采取了文件系统快照的方式
权限控制
-
对团队开发人员进行权限控制
-
对团队外开发者贡献的代码进行审核——Git独有
历史纪录
-
查看修改人/修改时间/修改内容/日志信息
-
将本地文件恢复到某一个历史状态
分支管理
- 允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率
linux系统版本控制历史
Git结构
Git和代码托管中心
代码托管中心的任务:维护远程库
局域网环境下
- GitLab服务器
外网环境下
-
GitHub
-
码云
本地库和远程库
- 团队内部协作
- 跨团队协作
本地库初始化
- 命令:git init
注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要随便修改
设置签名
-
形式
-
用户名:june
-
email地址: [email protected]
-
-
作用:区分不同开发人员的身份
-
辨析:这里设置的签名和登陆远程库的账号、密码没有任何关系
-
命令
-
项目级别/仓库级别:仅在当前本地库范围内有效
-
git config user.name june_pro
-
git config uger.email [email protected]
-
信息保存位置:./.git/config文件
-
-
系统用户级别:登陆当前操作系统的用户范围
-
git config --global user.name june_pro
-
git config --global uger.email [email protected]
-
信息保存位置:~/.gitconfig
-
-
级别优先级
-
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
-
如果只有系统用户级别的签名,就以系统用户级别的签名为准
-
不允许二者都没有
-
-
添加提交以及查看状态操作
git status 查看当前状态
On branch master 目前在主干分支
No commits yet 本地库没有提交过任何东西
nothing to commit 暂存区没有任何内容可提交
git add 提交变化到暂存区
git remote add origin 链接到远程库
git rm --cached 删除暂存区的内容【也就是将要提交的内容】
git commit 上传到本地库 (随后会进入vim编辑器)
git commit -m “my first.new file” 上传到本地库 (不会进入vim)
版本的前进和后退
查看历史纪录
git log
HEAD是指针的名字
多屏显示控制方式
空格向下翻页
b向上翻页
q退出
git log --pretty=oneline 以一行的格式显示出信息
git log --oneline
git reflog 显示了到某一个版本需要移动几步(HEAD@{步数})
基于索引值前进后退
git reset --hard 索引值
推荐使用
git reset --hard d1740cd
使用^符号
只能后退git reset --hard HEAD^ 一个^表示后退一步
使用~符号 只能后退
git reset --hard HEAD~n 表示后退n步
reset命令的三个参数对比
-
soft参数
-
仅仅在本地库移动HEAD指针
-
-
mixed参数
-
在本地库移动HEAD指针
-
重置暂存区
-
-
hard参数
永久删除文件后找回
vim delete.txt 创建文件并编辑
git add delete.txt 添加到暂存区
git commit -m ‘new delete.txt’ delete.txt 提交到本地库
rm delete.txt 删除文件
git add delete.txt 添加到暂存区
git commit -m ‘delete dekete.txt’ delete.txt 提交到本地库
git reset --hard 移动到文件存在时的版本
rm delete.txt 删除文件
git add delete.txt 添加到暂存区
git reset --hard HEAD 移动指针到当前指针处
比较文件差异
-
git fiff 将工作区中的文件和暂存区进行比较
-
git diff <本地库中历史版本> 将工作区中的文件和本地库历史纪录比较
-
git diff <本地库中历史版本> 比较当前工作区的所有文件
分支概述
在版本控制过程中,使用多条线同时推进多个任务
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支操作
-
创建分支 git branch <分支名>
- (创建分支并切换到分支:git checkout -b <分支名>)
-
查看分支 git branch -v
-
删除分支 git branch -d <分支名>
-
切换分支 git checkout <分支名>
-
合并分支 切换到master分支后 git merge [被合并分支名 master]
-
合并分支 切换到master分支后 git merge [有新内容分支名]
解决合并冲突
-
编辑文件,删除特殊符号
-
把文件修改到满意的程度
-
git add [文件名]
-
git commit -m ‘日志信息’
注意 此时commit一定不能带具体文件名
Git 基本原理
1. 哈希
哈希时一个系列的加密算法平时所说的哈希算法不止一个算法
,各个不同的哈希算法虽然加密成都不同,但是有以下几个共同点:
-
不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定
-
哈希算法确定,输入数据确定,输出数据能够保持不变
-
哈希算法确定,输入数据有变化,输入数据一定有变化,而且变化很大
-
哈希算法不可逆
2.保存版本的机制
-
- 以文件变更列表的方式存储信息。这类系统将它们保存的信息卡座是彝族基本文件和每个文件随时间逐步累积的差异。
Git的文件管理机制
- Git把数据看作是小型文件系统的一组快照。每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高校,如果文件没有修改,Git不再重新储存该文件,而是只保存一个链接指向之前存储的文件。所以Git的工作方式可以称之为快照流。
-
- Git的“提交的对象”
-
提交对象及其父对象形成的链条
-
- 分支的创建
- 分支的切换
在本地创建远程库地址别名
git remote add origin https://…/name.git 这句的意思是把后面的url改个别名为 origin
推送操作
git push origin master origin 为之前的别名
克隆操作
git clone https://…/name.git 将远程库克隆到本地
效果
-
完整的把远程库下载到本地
-
创建origin远程地址别名
-
初始化本地库
远程库拉取
拉取
pull = fetch + merge
抓取合并
git pull [远程地址别名] [远程分支名] 这一句等于下面两句,checkout不算
git fetch [远程库地址别名
origin
] [远程分支名master
]git checkout [远程地址别名/远程分支名] 切换过去看一下 保证安全
git checkout [远程分支名
master
]git merge [远程地址别名/远程分支名]