一、git的认识
git:版本控制工具,免费、分布式版本控制系统;
集中式版中控制系统:svn,最大的问题:中央服务器的单点故障
分布式版本控制系统:git,客户端并不是只提取最新版本的快照,还包括历史版本,git在客户端不仅保存最新的版本的代码,各历史版本的代码客户端也会保存,比svn存的东西多,但是占用内存并不比svn多多少,原因是用了极致的压缩、解压算法;
二、git简史
林纳斯-托瓦兹:主要成就:21岁开发Linux内核,很小就开始写代码了,发明了git;
三、git安装
1.官网 https://git-scm.com
官网下载,安装即可;
四、git本地结构
写代码区 ----git add---》 暂存区 ---git commit---》 本地仓库
五、初始化本地仓库
1.设置 Git Base Here 字体大小:
右键-->options,见下图:
2、查看git 安装版本
git --version
清屏:clear
3.git 设置签名
设置全局的用户名
git config --global user.name ''zs''
设置邮箱
git config --global user.email "***@.163.com"
4.本地仓库的初始化
4.1在本地创建文件夹,作为git的本地仓库,可以在客户端通过cd命令切换,也可以找到新建的文件夹下,右键-->Git Base Here,输入初始化仓库的init命令,如下:
显示创建了一个空的git仓库,显示的git信息:
4.2查看.git文件的内容:
git通过config等文件来管理文件;
5.常用命令 add、commit
5.1在本地仓库文件夹中创建一个txt文档,把txt文档添加到本地仓库:
先把txt文档通过add命令添加到暂存区,再从缓存区通过commit命令添加到本地仓库,命令如下:
-m 是对提交信息的说明
注意:不在本地仓库的文件是不能提交到git上管理的;
6.查看仓库文件的提交状态 git status
查看状态:
添加一个新文件后查看状态:
新文件添加到暂存区后查看状态:
新文件提交到本地仓库查看状态:
修改文件后查看状态:
修改后的文件需要重新从工作区添加到暂存区,从暂存区提交到本地仓库
修改文件的行数都可以看的到;
7.查看历史提交版本:git log
log显示是按照时间倒叙进行显示的,先显示最近提交的,commit 后面的Hash字符长串可以理解为:是git的索引,不会重复,每提交一次就会生成一个。
当log信息比较多时,会有分页,
显示下一页:空格键
显示上一页:b
逐行显示:回车(Enter)
退出:q
8.查看日志的四种方式:
1)git log 显示信息比较多,有分页
2)git log --pretty=oneline 让日志完美的在一行显示
3)git log --oneline 日志在一行显示 但是索引值截取了前7位
4) git reflog 多了HEAD信息,表示返回历史版本需要走的步数
9.git reset命令,前进或回退历史版本
把当前版本回退到3596c5c版本,文件中的内容也已经修改过去了。多次回退之后的日志:
reset各参数说明
git reset --hard [索引]:本地仓库索引值移动的同时,暂存区、工作区同时移动(常用)
git reset --mixed [索引]:本地仓库索引值移动的同时:暂存区移动,工作区不移动
git reset --soft [索引]:本地仓库索引值移动的同时,暂存区、工作区都不移动
10.删除文件并恢复本地仓库文件 只是对本地仓库文件的操作
恢复缓存区中删除的文件与恢复本地仓库删除文件操作步骤是一样的:
git reset --hard [索引] 或者
git reset --hard head@[数字] :恢复到某个步骤
11.比较文件的差异
1)比较工作区与暂存区的差异
git diff [文件名称] git是通过行来管理文件的,因此在原来行添加数据,行会全部删除,新增加一行
git diff 对比工作区与缓存区中所有的差异文件
比较缓存区与本地仓库文件的差异,如果与本地仓库当前版本比较:
git diff HEAD [文件名称]
与指定版本对比
git diff [索引] [文件名称]
12.分支
1)查看分支
git branch -v 目前只有一个master分支,并且显示最新的索引值
2)创建新分支
git branch V1 创建名字为V1的新分支,查看分支,*代表目前所在的分支
3)切换分支
git checkout V1 切换分支到V1
合并分支:切换到要合并的分支上进行合并,例如要把V1合并到master分支,先切换到master分支上,命令如下:git merge V1
如果合并的两个分支有冲突,则会显示(master|MERGING)需要手动解决冲突
文件显示如下,需要手动解决:
解决冲突后再进行合并:需要注意的是从暂存区提交到本地仓库不能加文件名称,否则提交报错
13.在gitHub上创建远程仓库,注册用户名设置密码,登录后页面如下:
点击“+”号创建仓库
14.远程仓库起别名
查看远程仓库的地址:
查看远程仓库有哪些别名并创建新的别名:git remote -v
给远程仓库创建别名:git remote add [别名] [远程仓库的地址]
fetch:表示可以从远程仓库取东西
push:表示可以上传到远程仓库
把本地仓库的东西上传到远程仓库:git push [远程仓库别名] [分支名称]
从远程仓库看,demo.txt已经上传,如下图:
12.克隆远程仓库的东西:git clone [远程仓库的地址]
远程仓库的地址:
克隆完成后查看远程仓库别名:需要切换到test本地仓库中查看
克隆做的三件事情:
1)初始化本地库
2) 把远程仓库的东西完整下载到本地
3) 远程库有的别名,帮我们创建远程库别名
13.邀请其他成员进入项目
windows git信息有缓存,查找git缓存:
邀请其他成员:
被邀请人接收即可;
14.pull 和fetch 拉取远程仓库的东西
pull操作:fetch + meger 两步操作的合并,拉取后合并到本地代码,即远程仓库的代码会合并到本地工作区
fetch操作:只是下载远程仓库的代码到本地,不会合并到本地工作区;
切换目录到远程仓库的某个分支下:
切换到本地库后并合并本地代码:
git pull [远程仓库] [分支] 拉取之后并合并本地工作区代码
14.跨公司协作
A公司的人创建了项目 B公司的人需要用
A把项目地址发给B:
B登陆github后,在地址栏中输入A发的项目地址:https://github.com/zhang654/testfork.git回车后,fork按钮可用了,点击fork后即可复制项目
注意fork的仓库必须是public的,private的看不到,fork的项目图标是这样的:
B下载项目,修改后并提交到本公司的仓库:
B想把改的东西提交到A公司的远程仓库,需要提交一个pull request,操作如下图所示:
提交之后就创建了一个pull 请求,在A公司的远程仓库可以看到,显示如下:
查看B修改的文件信息:
A同意合并,则操作如下,还可以给B就行留言
A的留言B会在pull request中看到。
16.SSH免密登陆
1)生成SSH密钥,进入主目录,是windows系统的主目录
在window主目录中,会生成一个.ssh的文件,打开文件如下图所示:
把id-rsa.pub公钥中的内容复制,复制到github中:
给SSH地址起别名,通过别名提交:
17.idea使用git
1)配置git,选择git的安装目录
2)初始化git本地仓库
选择目录,点击OK,git本地初始化完成。
3)提交文件到本地仓库
创建文件会提示是否加入暂存区,加入暂存区后,文件显示绿色,从暂存区提交到本地仓库。
idea这个菜单显示git的操作日志等信息:
4)本地库与远程仓库建立联系
先从远程仓库拉取信息:
git pull https://github.com/zhang123/test.git master --allow-unrelated-histories
输入 insert 进行输入 ,q退出编辑,输入:wq 进行保存,操作同linux命令一致。
把本地库信息push到远程仓库:
git push -u https://github.com/zhang123/test.git master -f
此时远程库与本地库就建立起了联系;
idea给远程仓库命名别名:
给远程仓库命名别名。
18.从远程仓库克隆代码到本地