git
欢迎打开这篇文章
你好! 这是你第一次了解 git 所展示的欢迎页。如果你想学习如何使用git, 可以仔细阅读这篇文章,了解一下基本语法知识。
目录
学习目标
学习目标
1、理解git的工作流程
2、理解命令行操作
3、掌握idea中使用git
第一章 Git简介及安装【掌握】
1,Git的简介
【1】,什么是Git
Git是目前世界上最先进的分布式文件版本控制系统(没有之一)。对于我们java程序员而言,管理的就是代码文件版本。
【2】,Git和GitHub
确切的说 GitHub 是一家公司,位于旧金山,由 Chris Wanstrath, PJ Hyett 与 Tom Preston-Werner 三位开发者在2008年4月创办,2008年4月10日,GitHub正式成立,主要提供基于git的版本托管服务。
一经上线,它的发展速度惊为天人,截止目前,GitHub 已经发展成全球最大的开源社区。
所以 Git 只是 GitHub 上用来管理项目的一个工具而已,但是GitHub 的功能可远不止于此!
【3】,SVN和Git
SVN和Git都是用于代码的版本管理的,二者不同的地方在于SVN是集中式代码管理,而Git是分布式代码管理,
【3.1】,集中式代码管理-SVN
SVN版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也 必须提交到这个中央版本库。
SVN版本控制系统工作流程如下:
1.在中央版本库上创建或从主干复制一个分支。
2.从中央版本库上check out 下这个分支的代码。
3.进入自己的分支,进行开发工作。每隔一段时间提交一次代码。
4.在快下班的时候commit代码,假设有人在刚刚的分支上面提交了代码,你就会被提示代码过期,你得先update你的本地代码然后在更新提交。update时如果出现冲突,需要解决好冲突后(代码合并)后在进行提交,把自己的分支代码提交到主干。
SVN的缺点:
1.无网的情况下:无法提交代码,无法查看代码的历史版本、无法同步代码
2.代码要定期做备份(所有的代码数据及版本变更记录)
3.分支切换缓慢
4.由于每次提交都会保留一个原始副本,因此SVN的数据库容量会暴增。尤其是在开发人员非常多的情况下。
【3.2】,分布式代码管理-Git
git没有中央版本库,但是为了方便开发小组的成员们进行代码共享,我们通常会搭建一个远程的git仓库。和svn不同的是开发者本地也包含一个完成的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从。
Git的版本工作流程如下:
1.你在本地创建一个工作区,并将其add到的git本地仓库中暂存区
2.你在本地增删改文件,然后commit,这里的commit是提交到本地的git仓库中了(其实就是提交到,本地的git目录下的objects目录中)
3.将本地的git仓库的分支push到远程git的仓库的分支,如果这个时候远程git仓库中已经有别人push过,那么远程的git仓库是不愿徐你push的,这个时候你要先pull,如果有冲突,处理好冲突,commit到本地git仓库后,在push到远程的git库。
Git的优点
1.比svn方便和快捷的切换分支
2.书写的代码可以随时提交
3.丰富的命令行操作和组合
4.可以一人一个仓库,仓库可以有多个分支
2,Git的安装
【1】,官网下载
下载地址: link.
还可以从这里下载
链接:https://pan.baidu.com/s/1luca8kxaRFv5D81K8L0uXA?pwd=e37l
提取码:e37l
–来自百度网盘超级会员V4的分享
【2】,安装步骤
双击直接安装【版本为64位系统的】
点击Next
点击Next
点击Next
点击Next
点击Next
点击Next
点击Finish完成安装,验证安装,找一个桌面空白处,右键出现下列窗口
点击后,出现Git的控制台,在控制台输入git,可以看到相关的帮助信息:
到这来就说明你的git安装完成
第二章 基于命令行操作【理解】
1,Git工作区域
【1】,工作区
工作区:
就是你在电脑里能看到的目录。比如我们刚刚创建的learn-Git目录,在最初使用的时候,我们需要初始化当前的文件夹为工作区
初始化工作区:右键文件夹中的空白处会出现Git的控制台
命令:git init 初始化控制台
在文件夹中机会出现一个隐藏文件.git如图
当我们在learn-Git文件夹中添加文件的时候,那么这个文件就会被Git所管理
【2】,版本区
2,基本操作
【1】,工作区提交缓存区
【1.1】,图例
【1.2】,操作步骤
【1.2.1】,创建文件
在learn-Git文件夹中新建文件:readme.txt
【1.2.2】,编辑readme文件
在git控制台中使用 命令:
命令:vi readme.txt
敲击回车键
需要注意的是此时,文本是没有进入编辑状态,需要输入i,进入编辑状态【左下角有插入字段】:
命令:i
输入一行汉字:
然后按住Esc,左下角的插入消失
【英文输入法下】然后按住shiftZZ
输入wq然后回车退出:
命令:wq
【1.2.3】,提交缓存区
命令:git add readme.txt
这个时候就完成从工作区提交版本区
【1.3】,命令小结
命令:vi readme.txt 编辑文件
命令:i 对文件进行插入
命令:wq 退出保存文件
命令:git add <文件名> 提交文件从工作区到缓存区
【2】,缓存区提交本地仓库
【2.1】,图例
【2.2】,操作步骤
命令:git commit -m '第一次提交'
说明:-m 后面跟随的是为你提交的备注
如果第一次提交需要填写如下内容:
命令:git config --global user.email '58948428@qq.com'
说明:指定邮箱
命令:git config --global user.name 'Shuwq'
说明:指定操作者
【2.3】,命令小结
命令:git commit -m '备注'
说明:-m 后面跟随的是为你提交的备注
命令:git config --global user.email '58948428@qq.com'
说明:指定邮箱
命令:git config --global user.name 'Shuwq'
说明:指定操作者
【3】,差异比较
【3.1】,编译文件
使用vi命令,对readme.txt文件进行编辑,添加我是第二行代码,使用wq退出【如果不了解的见工作区提交缓存区的操作】
【3.2】,工作区暂存区比较
命令:git diff readme.txt
【3.3】,工作区本地库比较
命令:git diff HEAD readme.txt
【3.4】,暂存区本地库比较
命令:git diff --cached readme.txt
这里缓存区和本地库没有不同所以没有内容
【3.5】,命令小结
命令:git diff readme.txt 工作区与暂存区比较
命令:git diff HEAD readme.txt 工作区与本地库比较
命令:git diff --cached readme.txt 暂存区和本地库比较
【4】,差异比较
我们如果不确定自己的哪些文件被修改了,需要怎么操作呢?
【4.1】,状态查看
命令:git status 查看当前文件的状态
提交缓存区后输入git status
提交本地仓库后输入git status,提示:工作区很干净,没有任何需要提交,这个时候就完成所有操作
【4.2】,命令小结
命令:git status 查看当前文件上传状态
【5】,版本回退
【5.1】,图例
当我们从暂存区提交到本地仓库时,发现当前的提交的版本有问题,希望回退到指定版本如何操作呢?
【5.2】,操作步骤
【5.2.1】,制造问题版本
使用vi命令编辑readme.txt,添加“我是第三行代码”
命令:git add readme.txt 提交到暂存区
命令:git commit -m '第三次提交' 提交到本地仓库
【5.2.2】,查看日志
命令:git log 查看当前提交日志
可以发现,目前为止,我们已经在本地仓库中提交了3次,也就是说有3个不同版本。其中,最近的这个版本有一个标示:HEAD-> master 这就是标记当前分支的当前版本所在位置,如果没有显示当前所在位置可以使用下面命令查看:
命令:git log --decorate 查看当前提交日志,且显示当前分支的当前版本所在位置
在log中,每一个版本的前面,都有一长串随即数字:1ef83ae73385559bb4e098ebdec83d47532ba38c ,这是每次提交的commit id ,这是通过SHA1算法得到的值,Git通过这个唯一的id来区分每次提交
【5.2.3】,回退之前版本
命令:git reset --hard HEAD^
回归到上一个版本,Git通过HEAD来判断当前所在的版本位置。那么上一个版本,就用HEAD^标示,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
命令:git log --decorate 查看当前提交日志,且显示当前分支的当前版本所在位置
命令: cat reader.txt 查看当前reader文件的信息
【5.2.4】,回退指定版本
首先找到整个的操作记录
命令: git reflog 查看所有操作
找到之后可以使用如下命令进行回归
命令:git reset --hard <版本号> 回退到指定版本
使用cat命令查看readme.txt,发现之前的信息又回来了
【5.3】,命令小结
命令:git reset --hard HEAD^
回归到上一个版本,Git通过HEAD来判断当前所在的版本位置。那么上一个版本,就用HEAD^标示,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
命令:git log 查看当前提交日志
命令:git log --decorate 查看当前提交日志,且显示当前分支的当前版本所在位置
命令:git reflog 查看所有操作
命令:git reset --hard <版本号> 回退到指定版本
【6】,修改撤销
【6.1】,工作区撤销修改
此处撤销:撤销尚未提交的缓存区的工作区的内容
【6.1.1】,图例
【6.1.2】,操作步骤
使用 vi 命令 编辑readme.txt添加“我是第四行代码”
在你提交缓存区前,你突然发现这个修改是有问题的,你打算恢复到原来的样子。怎么办?
使用git status 命令查看当前状态
命令:git checkout -- <文件名称> 撤销工作区修改
【6.2】,缓存区撤销修改
【6.2.1】,图例
【6.2.2】,操作步骤
使用 vi 命令 编辑readme.txt添加“我是第五行代码”
提交工作区提交到缓存区
命令:git add readme.txt
撤销到工作区
命令:git reset HEAD readme.txt 撤销到工作区
此时就可以在工作区撤销修改
查看readme.txt文件内容
【6.3】,命令小结
命令:git checkout -- <文件名称> 撤销工作区修改
命令:git reset HEAD readme.txt 撤销到工作区
3,远程仓库
到目前为止,我们已经学会了如何在本机利用git进行文件版本管理,但是如果要想进行多人协作,我们就必须使用远程仓库。将本地仓库的数据同步到远程仓库,实现多人协作开发。
目前比较热门的代码托管社区:GitHub,网址:https://github.com ,提供了免费的远程git仓库功能。不过网速不是特别流畅。 在国内,有很多的公司使用oschina提供的git服务:码云, https://gitee.com
【1】,码云仓库
【1.1】,注册登录
访问地址:https://gitee.com/
请自定完成注册和登录。
【1.2】,创建仓库
填写项目相关的信息
仓库创建完毕,可以看到,如果我们要与远程仓库同步,这里支持多种通信协议,当我们选中一种协议后,后面会出现对应的远程仓库地址。
【2】,关联远程仓库
现在readme.txt已经推送到我们自己的本地仓库,在推送到码云仓库前,我们需要先建立与远程仓库的关系
命令:git remote add origin https://gitee.com/shuwq/itheima-learn-git.git
关联远程仓库
【3】,拉取代码
【注意】在推送代码前必须先拉取代码,若则无法推送本地仓库代码到仓库
命令:git pull origin master --allow-unrelated-histories
首次拉取需要添加:--allow-unrelated-histories
命令:git pull 后续拉取
【4】,推送代码
命令: git push -u origin master 首次推送
命令: git push 后续推送
【5】,克隆远程仓库
如果我们新加入一个团队,这个时候就需要我们把代码从远程仓库克隆过来,那么咱们操作呢?
新建文件夹learn-Git-B,新建的文件中右键
点击 Git bash Here
命令: git clone https://gitee.com/shuwq/itheima-learn-git.git
这时候就拉取出远程仓库的内容
【6】,命令小结
命令:git remote add origin https://gitee.com/shuwq/itheima-learn-git.git
关联远程仓库
命令:git pull origin master --allow-unrelated-histories
首次拉取需要添加:--allow-unrelated-histories
命令:git pull 后续拉取
命令: git push -u origin master 首次推送
命令: git push 后续推送
命令: git clone https://gitee.com/shuwq/itheima-learn-git.git
4,本地分支
【1】,什么是分支
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
文件提交示意图:
命令: git checkout -b dev 创建且切换到dev
【2】,创建dev分支
分支创建示意图:
命令: git branch dev 创建dev分支
【3】,切换dev分支
命令: git checkout dev 切换dev分支
编辑readme.txt,添加“我是dev提交的代码”
从工作区提交到缓存区执行:git add readme.txt
执行:git commit -m ‘dev分支提交’
查看readme.txt可以看见
执行 git checkout master 切换master分支,查看readme.txt可以看见
【4】,分支合并
需要注意的是,当时我们所在的分支为master分支,在master分支上执行下列:
命令: git merge dev 合并dev分支
【5】,分支删除
【5.1】,图例
【5.2】,操作步骤
合并完分支之后,如果不再使用dev分支,则可以删除此分支,先查看当前分支:
命令:git branch 查看分支情况
可以看见当前在dev分支上,我们切换到master分支
命令:git checkout master
删除dev分支
命令:git branch -d dev
【6】,命令小结
命令: git branch dev 创建dev分支
命令: git checkout dev 切换dev分支
命令: git checkout -b dev 创建且切换到dev
命令: git merge dev 合并dev分支
命令: git branch 查看分支情况
命令: git branch -d dev 删除分支
5,命令大全
命令:git init 初始化控制台
命令:vi readme.txt 编辑文件
命令:i 对文件进行插入
命令:wq 退出保存文件
命令:git add <文件名> 提交文件从工作区到缓存区
命令:git commit -m '备注'
说明:-m 后面跟随的是为你提交的备注
命令:git config --global user.email '58948428@qq.com'
说明:指定邮箱
命令:git config --global user.name 'Shuwq'
说明:指定操作者
命令:git diff readme.txt 工作区与暂存区比较
命令:git diff HEAD readme.txt 工作区与本地库比较
命令:git diff --cached readme.txt 暂存区和本地库比较
命令:git status 查看当前文件上传状态
命令:git reset --hard HEAD^
回归到上一个版本,Git通过HEAD来判断当前所在的版本位置。那么上一个版本,就用HEAD^标示,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
命令:git log 查看当前提交日志
命令:git log --decorate 查看当前提交日志,且显示当前分支的当前版本所在位置
命令:git reflog 查看所有操作
命令:git reset --hard <版本号> 回退到指定版本
命令:git checkout -- <文件名称> 撤销工作区修改
命令:git reset HEAD readme.txt 撤销到工作区
命令:git remote add origin https://gitee.com/shuwq/itheima-learn-git.git 关联远程仓库
命令:git pull origin master --allow-unrelated-histories
首次拉取需要添加:--allow-unrelated-histories
命令:git pull 后续拉取
命令:git push -u origin master 首次推送
命令:git push 后续推送
命令:git clone https://gitee.com/shuwq/itheima-learn-git.git
命令:git branch dev 创建dev分支
命令:git checkout dev 切换dev分支
命令:git checkout -b dev 创建且切换到dev
命令:git merge dev 合并dev分支
命令:git branch 查看分支情况
命令:git branch -d dev 删除分支
第三章 idea中使用Git【重点】
【1】,idea继承Git
在idea中的file菜单中选中settings
弹出settings后在搜索中输入"git",选择Git,指定你的安装的git.exe目录
校验git是否集成完成,点击test,弹出校验窗口,点击git ececuted successed 成功则表示集成完成
【2】,基本操作
使用maven创建一个git-project项目,结构如下:
【1】,初始化工作区
点击VCS --> Import into Version Control --> Create Git Repository
选择管理的文件夹,这里我现在的为git-project-sk文件夹:
点击左下角,Version control菜单,此时git-project-sk下所有的文件都变成棕色,说明我们的本地仓库添加的完成了
【2】,忽略文件类型
从version control中我们可以看到有一部分文件,我们是不需要提交到本地仓库中去的:
那我们怎么做呢?可以拷贝"Git课件\02-课程资料"中.gitignore文件,到git-project-sk的根目录:
这个时候你会发现,多余的不需要提交的文件类型被忽略了。如果有新的要忽视的文件类型,你可以在.gitignore中添加
【3】,工作区提交缓存区
选中git-project项目,右键
可以看到Version control中的文件颜色由棕色变成的绿色
【4】,缓存区提交本地仓库
点击右下角Version control面板中,选中你要提交的文件,这里我都需要提交,使用全部选中
点击鼠标右键
选中commit:
点击Commit
再次确定,点击Commit
【5】,差异化比较
【5.1】,工作区与缓存区比较
格式化com.itheima.git.App.java类:
在Version Control中选中App.java右键:
你就可以看见工作区与缓存区的区别:
【5.2】,工作区与本地仓库比较
在Version Control中选中App.java右键:
点击左下角Version Control—>log,就可以查看提交记录
【6】,版本回退及撤销
【6.1】,制造问题版本
选择App.java,提交刚刚的修改到本地仓库中:
填写备注,然后点击commit:
在左下角Version Control中查看log
在App.java中添加
提交到本地仓库
在左下角version Control中查看log
可以看出此时:我们一共提交3次,下面我们来进行版本的回退
【6.2】,本地仓库回退撤销
在右下方Version Control点击log,此时我们可以看到3个提交的版本,
现在我们在本地仓库中回退到第二次提交,选择第二次提交的标记,右键
选择Hard
【6.3】,工作区撤销
当我们在工作区编辑代码时候,希望撤销未提交本地仓库的代码时候
在Version Control中右键
弹出如下窗口:
点击revert,代码则撤销:
【3】,远程仓库
【1】,创建仓库
新建:git-project-sk
【2】,关联远程仓库
VCS–>Git—>Remotes
点击之后弹出窗口,点击+
复制git-project-sk 的https地址
【3】,拉取代码
选择git-project-sk根目录,右键
弹出如下窗口,点击刷新
因为是首次拉取代码会报如下错误
之所以拉取不成功,是因为我们忽略文件与远程仓库的中的忽略文件冲突,这边我们选择合并
重新拉取代码:
拉取完成后我们可以看见远程仓库中的文件已经来到本地仓库
【4】,推送代码
推送成功提示
这时候什么去码云上查看:
我们的本地代码就推送到了远程仓库
【5】,克隆远程仓库
复制码云上仓库地址
在git-project-sk从远处git上克隆项目:
在新的空间中打开
操作完成
【4】,本地分支
【1】,创建dev分支
创建的同时切换分支:
查看当前所在分支:
【2】,分支合并
编辑App.java,需要注意右下角当前分支为dev
提交缓存区代码到dev分支
查看version control中的log,发现当前在dev环境上
切换回本地master分支
切换完成:
合并dev提交到master分支
【3】,分支删除
本地分支中就不会有dev分支了:
【4】,冲突解决
【4.1】,制造冲突
在码云中对App.java 做如下编辑
在IDEA中拉取代码
这时候App的类变红色,且弹出窗口,需要手动进行合并
解决冲突
选择主干:
提交远程仓库
【4.2】,特殊错误
点击最上面的时候进行代码拉取的时候
IDEA git 拉取项目时报 No tracked branch configured for branch master or the branch doesn’t exist的提示
选择本地工作空间右键
输入:
命令: git branch --set-upstream-to=origin/master
IDEA中再次拉取
第四章 TortoiseGit客户端【了解】
【1】,TortoiseGit的安装
链接:https://pan.baidu.com/s/190q_kIDaGDiRnUSMgtHHnQ?pwd=r74t
提取码:r74t
--来自百度网盘超级会员V4的分享
【2】,基本操作
【1】,初始化工作区
添加文件夹,在文件夹中添加wugui.txt,然后空白处右键:
【2】,工作区提交缓存区
编辑wugui.txt
右键–>TortoiseGit–>添加,提示:这一步等同于我们的 git add wugui.txt
此时直接点击提交,即可完成:git commit 操作:
提示:
【3】,差异化比较
修改wugui.txt
【4】,缓存区提交本地仓库
直接在文件上选择右键,提交即可:
提示:
【5】,版本回退及撤销
【5.1】,版本回退
编辑wugui.txt文件,保存
选择wugui.txt文件,右键显示日志
选择需要回退的版本
查看wugui.txt
【5.2】,修改撤销
编辑wugui.txt
现在后悔了,想要还原到修改以前。
我们可以选中文件,右键。然后选中菜单:还原。
【3】,远程仓库
【1】,创建仓库
【2】,关联远程仓库
新建文件夹learn-Git-wugui-B,在文件夹中右键,创建本地工作区
在文件夹中右键,进行远程仓库设置
选择远端,添加origin,填入https://gitee.com/shuwq/itheima-learn-git-wugui.git
【3】,拉取代码
【4】,推送代码
在learn-Git-wugui-B新建文件wugui.txt,添加到本地仓库
文件夹空白处右键
【4】,分支管理
【1】,创建dev分支
【2】,分支合并
【2.1】,切换dev分支
【2.2】,合并dev分支
编辑wugui.txt
选择文件,点击右键
提交dev
查看wugui.txt,在master分支上,我们没有看见dev分支提交的内容
空白处,右击
我们进行分支的合并:
提示
查看wugui.txt,这时出现了dev分支的内容