git和github
一、什么是git
开源的分布式版本控制系统
用来记录文件的变化,用来查阅特点版本修订情况的系统,又叫做“版本控制系统”。
二、版本控制系统的分类
1.本地版本控制系统
1.单击运行,不支持多人习作开发
2.一旦故障,数据容易丢失
2.集中化的版本控制系统
1.基于服务器、客户端的运行模式
2.客户端只保留最新的文件版本
3.联网运行,支持多人协作开发
4.不支持离线提交
5.比如SVN
3.分布式版本控制系统。
1.基于服务器、客户端的运行模式
2.客户端存储的是服务器的完整备份,并不是只保留文件的最新版本。
3.联网运行,支持多人开发协作。
4.客户端断网后,支持离线本地提交版本更新。
5.服务器故障和损害后,可以使用任何一个客户端的备份进行恢复。
6.比如git
三、git的特点
1.直接记录快照,而非差异比较
svn版本控制系统是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累积的差异。记录的是文件的变化,并不是记录更新后的文件内容。好处是节省磁盘,但是效率低。
当切换版本时,是把文件运用保存的差异,每次都运行一遍。然后得到最后的文件。
git快照类似于备份,是在原有文件的基础上重新生成一份新的文件,类似于备份,为了效率,要是文件没有修改,git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
缺点是占用磁盘控件,但是版本切换时非常快。
切换时直接恢复目标版本的快照即可。
2.近乎所有操作都是本地执行的。
四、git的三个区域
1.工作区
工作区中的文件分为4种状态
1.未跟踪的状态,新建的文件一般都是未跟踪的。
2.已跟踪,未修改的,工作区的文件和git仓库中的文件保持一致
3.已修改,未暂存的,工作区的文件和git仓库中的文件不一致
4.已暂存的文件,工作区中被修改的文件已经放到暂存区,准备提交到git仓库中
最终要的结果是工作区的内容和仓库的内容一致。
2.暂存区
3.Git仓库
五、git的三种状态
1.已修改的
表示修改了文件,但是还没有将修改的结果放到暂存区
2.已暂存的
表示对已修改的当前版本做了标记,使之包含在下次提交的列表中
3.已提交的
表示文件已经安全地保存在本地的Git仓库中
六、git的工作流程
1.在工作区中修改文件
2.将你想要下次提交的更改进行暂存
3.提交更新,找到暂存区,将快照永久性存储到Git仓库。
七、安装git
去官网直接下载。
八、配置Git
1.配置用户信息
设置自己的用户名和邮件地址,记录时谁对项目进行了操作。
git config --global user.name '名字'
git config --global user.email '邮件地址'
使用–global选项后,该命令需要运行一次即可,以后都不要设置。
2.查看配置信息
git config --list --global
# 查看所有的全局配置项
git config user.name
git config user.email
#查看指定的全局配置项
3.获取帮助信息
git help config
#git help 需要查看帮助的命令
#打开git config命令的帮助手册
#后面命令是什么就会打开什么命令的帮助手册,自动打开一个浏览器查看文档
git config -h
#这是直接在终端显示帮助,不会打开浏览器
4.获取git仓库的两种形式
1.将未进行版本控制的本地目录转换为git仓库
1.初始化仓库
在项目中鼠标右键打开‘git bash’
git init
git init会创建一个.git的隐藏目录。这个git目录就是当前项目的Git仓库,里面包含了初始的必要文件,这些文件是Git仓库的必要组成部分。删除这个文件,仓库就没了。
2.从其他服务器克隆一个已存在的git仓库
5.检查文件的状态
git status
检查工作区的文件都处于什么状态。是详细的信息
Untracked files (未跟踪的文件)
红色的modified 表示已修改,没提交到暂存区的文件
绿色的modified 表示已修改,已提交到暂存区的文件
即意味着git在之前的快照中没有这些文件,git不会自动将之纳入跟踪范围,除非明确的告诉它:我需要git跟踪管理该文件。
git status -s
#-s是short的缩写
#这是缩略的显示文件的信息,上面的是详细显示
未跟踪的文件前面有红色的??
新添加到暂存区的文件前面有绿色的A
所有文件都是未修改的状态就是什么都没有显示。
修改过的文件,没有放到暂存区的文件是红色的大M
绿色的D表示标记删除的文件。
6.跟踪新文件,添加到暂存区
git add 文件名
可以开始跟踪一个文件,并处于暂存的状态。
7.提交新文件到本地仓库
git commit -m '对本次提交的描述'
提交到本地仓库
8.对已提交到仓库的文件进行修改,提交到暂存区
当文件已经被提交到仓库后,修改文件后,需要把文件提交到暂存区中
需要再次运行
git add 文件名
git add有三种功能
1.用它来跟踪新文件
2.把已跟踪的,且已修改的文件放到暂存区
3.把有冲突的文件标记为已解决状态。
9.提交修改后已暂存的文件到本地仓库
再次运行
git commit -m '描述内容'
将修改后已暂存的文件提交到本地仓库。
10.撤销对文件的修改
把工作区中对应的文件换原成git仓库中所保存的版本,还原后,所有的修改都会丢失,且无法恢复。慎重撤销。
git checkout -- 文件名
即可撤销,是将仓库中储存的内容来覆盖工作区的内容。
尽量不要撤销。
11.一次性提交多个文件到暂存区
git add .
#后面加.就是所有的文件,将新增和修改后的文件新增到暂存区中
12.取消暂存的文件
git reset HEAD 要移除的文件名
将暂存区的文件移出
13.跳过使用暂存区
git的工作流程是工作区—暂存区—git仓库,此时可以跳过暂存区,直接将工作区中的修改提交到git仓库,这时候git的工作的流程简化了工作区–git仓库。
不写git add
直接修改文件后写
git commit -a -m '描述信息'
#添加-a 就能跳过git add
就能把所有跟踪的文件暂存起来并一起提交。跳过git add步骤
14.从git仓库移除文件
移除文件有两种
1.从git仓库和工作区同时移出文件
git rm -f 文件名
2.只从git仓库移出指定的文件,但保留工作区中对应的文件
git rm --cached 文件名
执行后需要进行一次提交才会生效。
15.git忽略文件
创建一个.gitignore的配置文件
1.以#号开头的是注释
2.以/结尾的是目录
3.以/开头防止递归
4.以!开头表示取反。
5.可以使用glob模式进行文件和文件夹的匹配(glob是简化了的正则表达式)
1.什么是glob模式
1.*表示匹配0或多个任意字符
2.[acb]匹配任何一个列在方括号的字符
3.?表示只匹配一个任意字符
4.方括号中使用短横线,表示所有在这两个字符范围内的都可以匹配(比如[0-9])
5.两个**表示匹配任意中间目录
比如a/**/z可以匹配a/z、a/b/z或a/b/c/z等
2.例子
*.a
#忽略以.a结尾的文件
!lib.a
#跟踪所有的lib.a,即使上面你忽略了所有.a结尾的文件
/TODO
#只忽略当前目录下的TODO文件,不忽略其他文件下的TODO
build/
#忽略任何目录下的build文件夹
doc/*.txt
#忽略doc目录下,以.txt结尾的文件,但不忽略doc目录下的孙子目录里的以.txt结尾的文件
doc/**/*.pdf
#忽略doc/目录及所有子目录下的.pdf文件
16.查看提交历史
git log
#按时间先后顺序列出所有的提交历史,最近的提交排在最上面
git log -2
#只展示最新的两条提交数据,数字可以按需进行填写
git log -2 --pretty=oneline
#在一行上展示最近两条提交历史
git log -2 --pretty=format:%h | %an | %ar | %s
#在一行上展示最近两天提交历史信息,并自定义输出的格式
#%h 提交的简写哈希值
#%an 作者名字
#%ar 作者修订日期,按多久以前的方式显示
#%s 提交说明
17、回退到指定版本
git log --pretty=oneline
#查看所有的提交历史
git reset --hard 版本id
#根据指定的提交ID回退到指定版本
#id可以查看历史找到
git reflog --pretty==oneline
#当返回旧版本后,还要在旧版本中查看历史,需要使用这个命令,可以查看命令操作的历史
git reset --hard 版本id
#再根据指定的提交ID回退到指定版本