目标1: 了解git 历史
目标2: 了解git 与 svn 的区别
目标3: 掌握git 的工作流程
目标4: 熟悉git 安装使用
目标5: 掌握git 管理文件版本
目标6: 掌握使用远程仓库
目标7: 掌握分支管理
目标8: 掌握IDEA 操作 Git
**目标:**掌握和了解Git是什么,在实际应用中处于什么角色。
需求
在项目开发中,团队协作管理代码和文件是每天必须要做的事情。大家一定会碰到如下几个场景和问题?
1:协同修改,多人并行开发修改服务器的文件
2:数据备份
3:版本管理,权限控制
4:如果文件和工程误删了还能找回来吗?
5:分支管理 1.0 2.0
6:遇到了文件冲突如何解决?
7:如何把一些我临时保存的文件不要提交?
Svn版本控制软件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JKP2D9jk-1605437019741)(assets/1571966237833.png)]
Git版本控制器软件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0qMBeqHW-1605437019743)(assets/1571966652553.png)]
小结
目标:学习和掌握git的发展史及特点
概述
同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。
Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002 年间)。到 2002 年,Linux 系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,于是整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。
到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:
• 速度快
• 简单的设计
• 对非线性开发模式的强力支持(允许上千个并行开发的分支)
• 完全分布式
• 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站(基友网站)上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-suPMHyGO-1605437019745)(assets/1571726570657.png)]
目标:Git与Svn区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。
下图就是标准的集中式版本控制工具管理方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMLfebUc-1605437019750)(assets/1571728355239.png)]
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
服务器单点故障
容错性差
Git是分布式版本控制系统,那么它可以没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
下图就是分布式版本控制工具管理方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3M5IE3W-1605437019753)(assets/1571728415965.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BKZJ5k5w-1605437019761)(assets/image-20200707090916595.png)]
小结
**目标:**了解github与码云代码托管中心
比较出名的代码托管中心: GitHub 和 码云
确切的说 GitHub 是一家公司,位于旧金山,由 Chris Wanstrath, PJ Hyett 与 Tom Preston-Werner 三位开发者在2008年4月创办。这是它的 Logo:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfYDF3h3-1605437019763)(assets/clip_image004.jpg)]
2008年4月10日,GitHub正式成立,地址:How people build software · GitHub ,主要提供基于git的版本托管服务。一经上线,它的发展速度惊为天人,截止目前,GitHub 已经发展成全球最大的开源社区。所以 Git 只是 GitHub 上用来管理项目的一个工具而已,GitHub 的功能可远不止于此!微软76亿美金收购Github
我们使用GitHub的时候,会感觉比较慢,为什么? 原因就是GitHub在遥远的美国,由于各种原因造成访问速度不怎么好,所以国内的git服务提供商,码云就起来了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MZzfVlZo-1605437019766)(assets/1571727595825.png)]
功能 | 码云 Gitee | GitHub |
---|---|---|
代码托管,支持 Git/SVN | √ | √ |
开源项目、代码片段 | √ | √ |
Issue | √ | √ |
Wiki | √ | √ |
Fork + Pull Request | √ | √ |
组织 | √ | √ |
私有仓库免费协作人数 | 5 人 | 3 人 |
保护分支 | 免费 | 收费 |
在线 IDE(Gitee IDE) | √ | 不支持 |
仓库自动备份 | √ | 不支持 |
禁止 Git 强推 | √ | 不支持 |
支持仓库访问 IP 限制 | √ | 不支持 |
企业级研发协作 | 5 人免费 | 收费 |
敏捷开发管理 | √ | |
任务看板(可灵活定义) | √ | |
支持多级任务、关联任务 | √ | |
自动代码质量分析 | √ | |
快捷生成工作周报 | √ | |
代码克隆检测 | √ | |
自动生成 JavaDoc/PHPDoc | √ | |
多语言 README 自动渲染 | √ | |
支持微信/钉钉通知 | √ |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MUQgADOz-1605437019768)(assets/1571625695350.png)]
前提
https://git-scm.com/download
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fgVnmLUl-1605437019770)(assets/1571728728098.png)]
安装教程:安装Git服务端
这是 windows 版本的 git 服务器;所以必须安装;安装说明详情见“资料”下的《Windows 系统安装 Git 2.14.1.docx》
双击安装:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JUtWAhrS-1605437019772)(assets/1573262288702.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R23MNF22-1605437019773)(assets/1573262034597.png)]
一路“Next”使用默认选项即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PmjkPUzL-1605437019775)(assets/1573262224843.png)]
安装完成后,可以在任意文件夹点右键,看到如下菜单:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d1HLEIpY-1605437019779)(assets/1573262669787.png)]
新建D:\test文件夹,在test上面,点击Git的控制台,在控制台输入git,可以看到相关的帮助信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOUcOB3Y-1605437019781)(assets/1573265813490.png)]
配置签名: 用户名和邮箱(提交的用户名与邮箱)
git config --global user.name “nameVal”
git config --global user.email “emailVal”
git config --global user.name "jet"
git config --global user.email "[email protected]"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x0HQaTF1-1605437019783)(assets/1573317337154.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9DlRCpWu-1605437019784)(assets/1571730311528.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zd3c5ufW-1605437019786)(assets/1571730279226.png)]
细节:
局部的用户信息放在:当前项目的 .git/config
全局的用户信息放在:系统盘的--用户目录--用户名目录-- .gitconfig文件中
[C:\Users\Administrator\.gitconfig]
**目标:**知道什么是版本库,并且创建它
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。
创建一个版本库非常简单:
首先,选择一个合适的地方,创建一个空目录。在D:\test目录下,创建了一个hello目录: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4K057dl8-1605437019788)(assets/clip_image023.jpg)]
使用git init命令把这个目录变成Git可以管理的仓库:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mlWwFok4-1605437019790)(assets/clip_image025.jpg)]
命令输入后,你已经创建了一个空的Git仓库。此时你会在hello目录下发现一个隐藏目录.git [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W1ngVKIn-1605437019792)(assets/clip_image027.jpg)]
这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
此处的hello目录就是我们的:工作区 (work tree),存放所有当前文档。此目录下的文件才会被Git管理,hello中的.git目录就是我们的:本地仓库,管理并保存所有的文档变化及历史状态。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0QREiNz-1605437019794)(assets/image-20200707094840944.png)]
版本库核心文件的解释
目录 | 描述 |
---|---|
config | 该文件主要记录针对该项目的一些配置信息,例如是否以bare方式初始化、remote的信息等,通过git remote add命令增加的远程分支的信息就保存在这里; |
objects | Git中的文件和一些操作都会以git对象来保存,git对象分为BLOB、tree和commit三种类型,例如git commit便是git中的commit对象,而各个版本之间是通过版本树来组织的,比如当前的HEAD会指向某个commit对象,而该commit对象又会指向几个BLOB对象或者tree对象。 |
HEAD | 该文件指明了git branch(即当前分支)的结果,比如当前分支是master,则该文件就会指向master,但是并不是存储一个master字符串,而是分支在refs中的表示,例如ref: refs/heads/master |
index | 该文件保存了暂存区域的信息。该文件某种程度就是缓冲区(staging area),内容包括它指向的文件的时间戳、文件名、sha1值等; |
Refs | 该文件夹存储指向数据(分支)的提交对象的指针。 |
小结
创建版本库的命令步骤是? git init
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WIwGuDnE-1605437019796)(assets/image-20200707094913555.png)]
**目标:**Git是如何在仓库中添加文件并提交到本地仓库?
版本控制系统,其目的就是跟踪文本文件的改动,例如我们开发时编写的.java、.properties本质都是文本文件。文件中每一个字符的变化都会被跟踪并且管理。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w5cnWRVo-1605437019800)(assets/1552015317597.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qXa1WHdu-1605437019801)(assets/1551861304830.png)]
我们在当前的hello目录下创建一个新的文本文件:readme.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IidTucld-1605437019805)(assets/clip_image029.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1HzJr3F-1605437019807)(assets/clip_image031.jpg)]
编写一段文字:hello Git!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5uN8ksfB-1605437019809)(assets/clip_image033.jpg)]
接下来,我们使用 git add 命令,将文件添加到暂存区[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BavA0w1D-1605437019813)(assets/clip_image035.jpg)]
没有任何的反应,证明没有问题。
使用 git commit 命令,将暂存区文件提交到本地仓库[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NWBlYsf-1605437019815)(assets/clip_image037.jpg)]
命令解释:
git commit 命令可以将暂存区的文件提交到版本库。
-m 参数,是本次提交的说明信息,用来注释本次提交做了些说明事情。
**总结: **将一个文件添加到本地仓库,分两步:
1)git add 文件/. (到暂存区)
2)git commit -m ‘注释’(到版本库)
演示的命令如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7PngeAao-1605437019817)(assets/image-20200707095746816.png)]
可能大家会有疑问,为什么这里不是直接commit提交,而是要经过add和commit两个步骤呢?
这就关系到Git的版本库中的 工作区 暂存区概念了。
**目标:**理解Git 工作区、暂存区和版本库概念
工作区:
工作区就是你在电脑里能看到的目录。比如我们刚刚创建的hello目录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZajlVsYr-1605437019819)(assets/clip_image039.jpg)]
其中包含了一个隐藏目录 .git ,其它就是我们需要被管理的文件。
版本库及暂存区:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9sstmVm-1605437019824)(assets/clip_image041.jpg)]
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
为什么Git会设计暂存区?
Git暂存区的目的在于分段提交!怎么理解?
Git的add是可以选择文件的,commit是不能选择文件的!Git的commit(提交操作)是原子操作,意味着一次提交会把所有文件全部提交,如果失败则一个文件都不提交。如果Git没有暂存区,工作区修改的代码 就只能一次全部提交,而在实际开发过程中,我们在开发过程中可能会出现突发的Bug需要修复,这时我们只需要选择提交修改好的Bug的文件即可,从而实现分段提交的效果。
**小结:**你可以简单理解为,需要提交的文件通通先放到暂存区,然后,一次性提交暂存区到版本库(分支)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WOe7WJqJ-1605437019827)(assets/image-20200707100119399.png)]
**目标:**掌握文件的修改以及修改的提交及状态日志的查看
被版本库管理的文件不可避免的要发生修改,此时只需要直接对文件修改即可。修改完毕后需要将文件的修改提交到版本库。
我们对readme.txt文件进行修改,添加一行数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NZoNlPT5-1605437019828)(assets/1571732075149.png)]
> git diff readme.txt 将工作区的文件和暂存区进行比较差异
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XKmCkDkw-1605437019830)(assets/image-20200704101040007.png)]
可以发现,与版本库中的 readme.txt相比,我们多了一行文本!
我们如果不确定自己的哪些文件被修改了,可以使用git status命令,查看当前工作区的状态: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CYD9vCgV-1605437019831)(assets/clip_image047.jpg)]
可以清楚的看到:changes not staged for commit(修改没有被缓存,需要使用git add来进行添加操作),我们使用git add 命令,添加到暂存区:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtO9JlQu-1605437019833)(assets/clip_image049.jpg)]
再次查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-66hmQNhH-1605437019837)(assets/clip_image051.jpg)]
这次提示: changes to be commited (修改需要被提交),我们使用git commit 进行提交[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YyJm2wGE-1605437019839)(assets/clip_image053.jpg)]
再次查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2DOrLkd-1605437019843)(assets/clip_image055.jpg)]
提示说:工作区很干净,没有任何需要提交,搞定!
再次修改readme.txt 新增内容: Test version control. 提交到版本库[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WwIwqMDK-1605437019845)(assets/1573270158812.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3gLLXcgc-1605437019846)(assets/1573270445099.png)]
git log 整体展示,不直观,如果要翻页,一直按enter键进行翻页,按CTRL+C退出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hir1YcjW-1605437019848)(assets/1571733099690.png)]
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
(一行显示)参数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLFQxHix-1605437019851)(assets/clip_image063.jpg)]
可以发现,目前为止,我们已经在本地仓库中提交了3次,也就是说有3个不同版本。其中,最近的这个版本有一个标示:HEAD ,这就是标记当前分支的当前版本所在位置。本例当中,当前版本即 test version control这次提交。
另外,在log中,每一个版本的前面,都有一长串随即数字:5bc7781319b…192728 ,这是每次提交的commit id ,这是通过SHA1算法得到的值,Git通过这个唯一的id来区分每次提交。
美化的缩小版
git log --oneline
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3mtr2wqI-1605437019853)(assets/1573270628606.png)]
小结
比较差异、查看修改状态、查看日志的命令是什么?
git diff readme.txt 比较工作区与暂存区的差异
git status 查看状态
git log --oneline 查看日志,一行显示,日志的版本号只显示前7位(前7位可以表示整个版本号)
**目标:**使用git命令git reset 找回文件回退到历史版本
现在,假设我们要回到上一级版本,该如何操作呢?
我们可以通过git reflog命令,看到以前的每次执行动作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHt3Zvf6-1605437019855)(assets/1573273912620.png)]
其中红框内的部分,就是我们第三次提交的日志信息。前面的Obd575f就是第三次提交的 commit id 的前几位数字。
语法: git reset --hard ‘版本号’
git reset --hard 0712188
提示说:HEAD 现在已经被设置到 0712188 的版本,即 modify readme file。
我们查看readme.txt,果然,版本已经回退了,最新添加的数据“Test version control”已经没了。
此时再次查看日志,发现只剩下2次提交信息了,第三次提交的信息已经没了:
假如此时我后悔了,还想回到第3次提交的版本,怎么办?
查看日志,得到版本号,回退指定版本:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DTKl5uua-1605437019856)(assets/1573274558778.png)]查看文件:(数据又回来了!)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5W9jBKY-1605437019858)(assets/clip_image077.jpg)]
总结:
如果要进行版本回退,一般分两步:
其实版本的回退,仅仅是修改HEAD指针的位置而已,因此Git进行版本的切换,比svn要快的多!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upBq30ac-1605437019859)(assets/1571972378334.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxzZX3b4-1605437019861)(assets/1571972348985.png)]
**目标:**掌握文件修改的撤销
现在我们在readme.txt中添加一行数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k45UkkWb-1605437019864)(assets/clip_image079.jpg)]
查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gnwe2NOo-1605437019865)(assets/clip_image081.jpg)]
Git提示我们,现在文件已经修改,等待被staged(暂存)。我们有两个选择:
所以,这里我们选择第二种方案:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZirwj9I-1605437019868)(assets/clip_image083.jpg)]
再次查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdnP81Cm-1605437019870)(assets/clip_image085.jpg)]
工作区是干净的!查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXhlr7O-1605437019872)(assets/clip_image087.jpg)]
修改已经被撤销了!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eeZL0pdl-1605437019873)(assets/clip_image089.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m5nvsC1e-1605437019875)(assets/clip_image091.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7C8AtTN-1605437019880)(assets/clip_image093.jpg)]
我们前面说过,git reset 命令可以进行版本回退,此处reset 指定的是HEAD ,而不是其他版本,因此就有撤销缓存修改的作用:
git reset HEAD readme.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZOqx3gvz-1605437019881)(assets/clip_image095.jpg)]
查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNm8bJff-1605437019883)(assets/clip_image097.jpg)]
发现文件的修改被撤回到了工作区,尚未添加到staged(暂存区),我们再次执行git checkout – 即可撤销工作区修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cDVkGkWp-1605437019884)(assets/clip_image099.jpg)]
工作区干净了!查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XcaYMwWF-1605437019886)(assets/clip_image101.jpg)]
文件也恢复了原来的状态,整个世界都清净了!
小结:
撤销修改分两种情况:
撤销工作区修改,使用git checkout –
撤销暂存区修改,分两步:
使用git reset HEAD 来撤销暂存区修改。
使用git checkout – 来撤销工作区修改。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6iZpJayR-1605437019887)(assets/image-20200707102501065.png)]
问题
往往在开发的过程中,特别是在多人协作的场景下,可能需要把一些无用的文件不需要提交。GIT是如何来做的的呢?
图解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4ePY6H8-1605437019889)(assets/1552017055333.png)]
在当前工作区创建忽略文件:.gitignore
# 1: 打开`git bash here` 输入如下命令:
vim .gitignore
target
*.iml
.idea
# 2: 保存退出
:wq
gitignore 语法规则:
空行或是以 # 开头的行即 注释行,将会被忽略。
示例如下:
# 忽略所有 .a 文件
*.a
# 递归忽略 build/ 文件夹下的所有文件
build
# 忽略 /doc/notes.txt,不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
问题
之前我们讲的文件版本控制都是在本机的本地仓库中进行操作,如何进行团队协作开发,怎么把我们本地仓库的代码共享出来供团队的其他开发员下载使用呢?
没错就是:远程仓库。
到目前为止,我们已经学会了如何在本机利用git进行文件版本管理,但是如果要想进行多人协作,我们就必须使用远程仓库。将本地仓库的数据同步到远程仓库,实现多人协作开发。
目前比较热门的代码托管社区:GitHub,网址:https://gtihub.com ,提供了免费的远程git仓库功能。不过网速不是特别流畅。
在国内,有很多的公司使用oschina提供的git服务:码云, https://gitee.com。
也可以自己搭建:gitlab。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yfKHHzfg-1605437019890)(assets/1552011927979.png)]
注册 https://github.com/join
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qbzvtXZw-1605437019892)(assets/1551778168169.png)]
创建远程仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5sgRYkV-1605437019893)(assets/1573285784447.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1SeX7cjj-1605437019895)(assets/1585233100063.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BqkoeZRv-1605437019896)(assets/1551778325768.png)]
注册: https://gitee.com/signup
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLkhFzIp-1605437019897)(assets/1562118994650.png)]
创建远程仓库
在页面右侧,选择创建新的仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eS525gC1-1605437019899)(assets/1573286509957.png)]
填写仓库信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCbYIxo7-1605437019901)(assets/1573286805103.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HgXFcJZd-1605437019902)(assets/1573287031824.png)]
仓库创建完毕,可以看到,如果我们要与远程仓库同步,这里支持两种不同的通信协议,ssh和http。当我们选中一种协议后,后面会出现对应的远程仓库地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qI0jdbws-1605437019903)(assets/1573287264904.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Etl19xI9-1605437019904)(assets/1552013586401.png)]
操作步骤
添加或删除关联远程仓库
git remote add origin url # 为当前本地仓库添加关联的远程仓库
git remote rm origin # 从当前本地仓库中删除关联的远程仓库
origin: 为远程仓库起个别名
url: 远程url
添加本地仓库和远程仓库关联-https连接 (第一种方式)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bfoSKNCF-1605437019906)(assets/1573288233369.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UfLC7HBd-1605437019907)(assets/1573288162164.png)]
# 执行此命令必须要进入该仓库对应的工作区
# github
git remote add origin https://github.com/lixiaohua1/gitdemo.git
# 码云
git remote add origin2 https://gitee.com/leesiuwah/gitdemo.git
# 如果删除之前关联:
git remote rm origin
git remote add origin 改成新的地址
注: 初次关联使用提交代码的时候需要填写,账号和密码信息(为github 或 码云 的登录用户名与密码)。用户名:[email protected] 密码: xxxxx
【稍后再使用】: 添加本地仓库和远程仓库关联-ssh连接(第二种方式: 免密)
同步本地仓库到远程仓库的命令:
# 同步本地仓库到远程仓库
# github
git push -u origin master
# 码云
git push -u origin2 master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KgEax94l-1605437019908)(assets/1573289308393.png)]
注:origin 可以理解为远程仓库的别名,master 主分支。
小结
git remote add 别名 url地址 设置远程仓库的地址
git push -u 别名 分支名称 把本地仓库代码推送到指定的远程仓库
目标: 如何克隆远程仓库到本机呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-19UweQYk-1605437019910)(assets/1552012770907.png)]
操作命令
# 克隆远程仓库到本机
# git clone ssh/https
# github
git clone https://github.com/lixiaohua1/gitdemo.git
# 码云
git clone https://gitee.com/leesiuwah/gitdemo.git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eSI84S3F-1605437019912)(assets/1573291519356.png)]
注意:新克隆下来的远程仓库访问名称默认为 origin
**目标:**如何同步远程仓库的代码到本地仓库到呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BSHP4529-1605437019918)(assets/1551861817226.png)]
git命令
# 更新远程仓库到本地仓库
git pull origin master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aVHvRU7x-1605437019920)(assets/1573293117681.png)]
如果出现如下问题
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/kekesam/pingyougou2.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决方案
git push -f origin master
说明: 它会把远程仓库中所有的信息全部清空,在把本机仓库版本提交上去。
目标:掌握ssh协议免密的配置
连接远程仓库,势必会进行其用户验证,这个时候需要频繁的输入用户的账号信息,有没有一种能够免密的操作呢?为什么我们连接好以后就不需要配置用户名和密码了呢?因为windows10系统会帮我们记录用户的凭据信息可以在【控制面板】—凭据管理中获得。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-21W7ierU-1605437019924)(assets/1571735966405.png)]
但是很遗憾的是: 在window7系统中没有这种凭据,https的这种方式可能就会出现一个现象就是频繁的数据用户名和密码,这样就是一件繁琐的操作,如何解决呢?没错使用ssh的方式来进行连接。
SSH架构: Struts2 + Spring + Hibernate。我们说得是ssh协议。
Git-bash中已经集成了ssh功能,所以我们只需要简单的命令,即可生成密钥:
命令: ssh-keygen -t rsa
一路回车向下走,不要输入任何内容即可!
ssh-keygen -t rsa 一路三个回车
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1prv9xkK-1605437019925)(assets/clip_image113.jpg)]
执行命令完成后, 在C:\Users\Administrator\
.ssh下面生成如下名称的公钥和私钥:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n5GeXmFG-1605437019927)(assets/1573294004878.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyPR7DAb-1605437019928)(assets/1552012491019.png)]
具体步骤如下:
第一步: 打开命令工具"git bash here" 输入命令 “ssh-keygen -t rsa” 生成密钥和公钥
ssh-keygen -t rsa
第二步: 然后将C:\Users\Administrator\.ssh
生成的公钥文件【id_rsa.pub】内容复制出来
第三步:
打开gitee官网–【登录】–【设置】-【SSH公钥】选项如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQumi6nr-1605437019930)(assets/1573295254445.png)]
打开github官网–【登录】–【settings】-【SSH and GPG keys】选项如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gcBhnYZG-1605437019931)(assets/1573295578961.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zoXynXoh-1605437019932)(assets/1573295703584.png)]
第四步: 测试和体验ssh的免密操作
添加远程仓库和本地仓库的关联:(origin 是默认的远程版本库名称)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bV6bF7L-1605437019935)(assets/1573289084106.png)]
# github
git remote add origin [email protected]:lixiaohua1/gitdemo.git
# 码云
git remote add origin2 [email protected]:leesiuwah/gitdemo.git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bER4Q3uS-1605437019940)(assets/1573313341064.png)]
提示:如果你想更换远程仓库的地址:
git remote rm origin #删除原来的origin
git remote rm origin2 #删除原来的origin2
# 然后在执行
git remote add origin 你需要更换的远程仓库地址
提交代码到远程仓库中:
git push origin master
git push origin2 master
克隆远程仓库到本机:
# github
git clone [email protected]:lixiaohua1/gitdemo.git
# 码云
git clone [email protected]:leesiuwah/gitdemo.git
注意:新克隆下来的远程仓库访问名称默认为 origin
拉取最新代码到本机
git pull origin master
注意:记得将https地址更换ssh地址。
1)使用ssh-keygen生成公私钥
2)把公钥设置到github或者码云
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JE9JEFqT-1605437019945)(assets/1571989886482.png)]
文件提交的过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1N9ozoSU-1605437019947)(assets/1551862269717.png)]
新建分支与切换分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NKgmxNdV-1605437019950)(assets/1551862657349.png)]
合并分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qu1Tm19C-1605437019952)(assets/1551863332557.png)]
第一步:创建分支
git branch dev 创建分支 dev
git checkout dev 选中当前分支 dev
# 注:上面两个命令可以组合成一个复合命令
git checkout -b dev
# git checkout -b dev = (git branch dev + git checkout dev)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TbBE1KJb-1605437019953)(assets/1573315324231.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBSOcXvf-1605437019955)(assets/1573315417906.png)]
第二步:查看分支
git branch
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yhw75xVi-1605437019956)(assets/1573315498108.png)]
第三步:添加文件,提交文件在当前分支
# 创建文件,输入任意内容
vim e.txt
# 提交e.txt文件
git add .
# 提交e.txt文件到dev分支中
git commit -m 'e.txt'
第四步:推送分支到远程仓库中
git push origin dev
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kfoV2i7d-1605437019958)(assets/1573315908217.png)]
第五步:合并分支
# 切换回master分支
git checkout master
# 将dev下面的内容全部合并到master
git merge dev
git push -u origin2 master 把本地分支推送到远程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UyCpFpJK-1605437019959)(assets/1573316053364.png)]
第六步:删除分支
git branch -d dev 删除本地分支
git push origin2 --delete dev 删除远程分支
小结
目标:掌握客户端的安装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qexrPdby-1605437019960)(assets/1573316488517.png)]
一路“Next”使用默认选项即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6brNPj61-1605437019962)(assets/1573316562626.png)]
默认选项下会启动配置画面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XIXpxlh-1605437019963)(assets/1573317005900.png)]
由于目前只有英文语言包,默认即可继续下一步。
配置git.exe,在4.2.1中已经安装过git-for-windows了所以在此找到git.exe所在的目录。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1JrveYZJ-1605437019964)(assets/1573316635345.png)]
配置开发者姓名及邮箱,每次提交代码时都会把此信息包含到提交的信息中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aM2pEPsY-1605437019966)(assets/1573316873671.png)]
使用默认配置,点击“完成”按钮完成配置。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tqQ7KSLG-1605437019967)(assets/1573316924437.png)]
完整完毕后在系统右键菜单中会出现git的菜单项。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EenDU1aC-1605437019968)(assets/1573317073016.png)]
安装中文语言包并不是必选项。可以根据个人情况来选择安装。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jcPVKeQj-1605437019969)(assets/1571736676125.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mJpOnNSE-1605437019970)(assets/clip_image260.jpg)]
直接“下一步”完整完毕。
鼠标右键选择Settings
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2H7XGtQ6-1605437019972)(assets/clip_image262.jpg)]
语言包安装完毕后可以在TortoiseGit的设置中调整语言
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jT5xpTKD-1605437019973)(assets/clip_image264.jpg)]
我们新建一个空的文件夹:tortoise
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNgSOpLY-1605437019974)(assets/clip_image266.jpg)]
然后进入tortoise目录,右键操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0cSuoPj6-1605437019975)(assets/clip_image268.jpg)]
弹出提示,不要勾选:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5sAX5KRm-1605437019976)(assets/clip_image270.jpg)]
查看目录,发现生成.git文件夹:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTV31xy9-1605437019978)(assets/clip_image272.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wlz8cKXY-1605437019979)(assets/1573347822882.png)]
注意: 想看到对应的图标,电脑需要重启。
创建新的文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1jiPebYD-1605437019980)(assets/clip_image274.jpg)]
编写内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KklSmCy7-1605437019981)(assets/clip_image276.jpg)]
在文件夹中右键操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10LEoqKr-1605437019983)(assets/clip_image278.jpg)]
提示:这一步等同于我们的 git add readme.txt [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjU2N6C3-1605437019984)(assets/clip_image280.jpg)]
此时直接点击提交,即可完成:git commit 操作: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnfA7Cdr-1605437019985)(assets/clip_image282.jpg)]
提示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2bo7z7bX-1605437019986)(assets/clip_image284.jpg)]
修改readme.txt:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vatgs3jk-1605437019987)(assets/clip_image286.jpg)]
右键操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-85x3KxqA-1605437019989)(assets/clip_image288.jpg)]
结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDzvP079-1605437019991)(assets/clip_image290.jpg)]
直接在文件上选择右键,提交即可:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ub72gxd3-1605437019992)(assets/clip_image292.jpg)]
选中文件,右键菜单中,选中查看日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SerxA0zi-1605437019994)(assets/clip_image294.jpg)]
提交的日志信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M06nRd8a-1605437019995)(assets/clip_image296.jpg)]
现在我们再次修改readme.txt,并且提交
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7Zi8cvb-1605437019997)(assets/clip_image298.jpg)]
查看日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SY0Vo1VO-1605437019998)(assets/clip_image300.jpg)]
假如我们要回到上一个版本,也就是第2次提交。
我们选中第2次提交,然后右键,选中:重置“master”到这个版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-20DmcWAC-1605437020000)(assets/clip_image302.jpg)]
弹出菜单,这里选中Hard模式,然后确定:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6P0q2bsB-1605437020002)(assets/clip_image304.jpg)]
再次查看日志,只剩下第1和第2次提交了。并且HEAD已经设置到了第2次提交位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwfxierZ-1605437020004)(assets/clip_image306.jpg)]
文件也回滚了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGntOfCb-1605437020005)(assets/clip_image308.jpg)]
如果我现在后悔了,想再次回到第3次提交怎么办?现在连日志都没有了!
此时,在空白处点击右键,选中 显示引用记录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42JzDjr8-1605437020006)(assets/clip_image310.jpg)]
弹出所有操作的日志信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LXjqBFH7-1605437020007)(assets/clip_image312.jpg)]
现在,我们找到第3次提交,右键,选中:重置“master”到这个版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ILX9jNbd-1605437020009)(assets/clip_image314.jpg)]
结果,第3次提交又回来了!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRgOweE3-1605437020010)(assets/clip_image316.jpg)]
文件内容回来了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tkVAcHQ-1605437020011)(assets/clip_image318.jpg)]
我们现在修改文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bB6yoNNC-1605437020012)(assets/clip_image320.jpg)]
现在后悔了,想要还原到修改以前。
我们可以选中文件,右键。然后选中菜单:还原。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mevyGBhN-1605437020013)(assets/clip_image322.jpg)]
点击确定:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJjB15hL-1605437020014)(assets/clip_image324.jpg)]
还原成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVMad2fn-1605437020015)(assets/clip_image326.jpg)]
查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tAlWIxKC-1605437020017)(assets/clip_image328.jpg)]
在Idea中配置Git,打开File菜单:
在File --> Settings -> Version Control --> Git -->Path to Git executable选择你的git安装后的git.exe文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9hav2PC-1605437020018)(assets/1571913145490.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SksuSdrK-1605437020019)(assets/1571913325967.png)]
配置本地安装的Git:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWvSuIEO-1605437020020)(assets/1573349918013.png)]
新建一个maven工程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gT7hF3Ce-1605437020021)(assets/clip_image436.jpg)]
编写简单的代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJopseLw-1605437020022)(assets/clip_image438.jpg)]
创建Git本地仓库
VCS菜单: VCS --> Import into Version Control --> Create Git Repository…
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HooljY5L-1605437020024)(assets/clip_image440.jpg)]
在弹框中选中项目所在的位置,点击OK,此时项目文件全部变成棕色
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cCbuHLRK-1605437020025)(assets/clip_image442.jpg)]
项目Git版本已经创建成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCpBdOmm-1605437020027)(assets/clip_image444.jpg)]
这里可以手动修改.gitignore文件,也可以通过插件过滤。我们手动修改:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRclQclw-1605437020028)(assets/1574323939391.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fi5ywMal-1605437020029)(assets/1574324280517.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DEj1tRb5-1605437020031)(assets/image-20200706010101775.png)]
# 官方忽略
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
# 新增
.classpath
.project
.settings
target
# idea
*.iml
.idea
项目右键选择Git --> add
此时项目文件变成绿色,此时文件只是处于暂存区,并没有真正进入到版本库中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wv0n1xbY-1605437020032)(assets/clip_image448.jpg)]
此时项目文件全部变成绿色。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4EVxvGW-1605437020034)(assets/clip_image450.jpg)]
项目右键Git --> Commit Directory
在弹窗中输入Commit Message,点击commit,此时项目文件从暂存区真正进入版本库中,项目文件变成黑色。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8MmrBQe2-1605437020035)(assets/clip_image452.jpg)]
编辑本次提交备注信息,然后点击commit按钮。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAEvPtuj-1605437020037)(assets/clip_image454.jpg)]
此时项目文件全部变成黑色:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AtiMSZD2-1605437020039)(assets/clip_image456.jpg)]
在远程仓库创建新项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pwvk9MBc-1605437020040)(assets/clip_image458.jpg)]
记录地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBC7QFu3-1605437020042)(assets/clip_image460.jpg)]
右键菜单 —> Git --> Repository --> Push,然后填写远程仓库地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s55rcqXw-1605437020043)(assets/clip_image462.jpg)]
复制远程仓库的地址,并填写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I62OGycW-1605437020045)(assets/clip_image464.jpg)]
选择远程分支的名称,点击Push:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KVkMF3H-1605437020046)(assets/clip_image466.jpg)]
推送成功, 在Idea右下角弹出提示框
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XC62UQOG-1605437020047)(assets/clip_image468.jpg)]
查看远程仓库,推送成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RIpqJ9nO-1605437020048)(assets/clip_image470.jpg)]
在远程仓库随意修改代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55nShyeb-1605437020049)(assets/clip_image472.jpg)]
在项目中,拉取代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OMtyut79-1605437020051)(assets/clip_image474.jpg)]
点击Pull
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbzdjPip-1605437020052)(assets/clip_image476.jpg)]
代码成功同步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCsajzte-1605437020053)(assets/clip_image478.jpg)]
打开Settings…
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TaIN4IbC-1605437020054)(assets/clip_image480.jpg)]
断开idea与Git版本仓库的关联:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wkSAaIVZ-1605437020055)(assets/clip_image482.jpg)]
Idea和项目Git版本控制断开关联。
克隆项目,关键地方,指定远程仓库路径、项目路径、项目名称:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9HWrKjCe-1605437020056)(assets/image-20200707151646437.png)]
打开Idea: 点击 Check out form Version Control,选中Git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SkuhtX1M-1605437020057)(assets/clip_image484.jpg)]
填入远程仓库SSH地址,输入你的远程仓库地址,点击Test,测试一下地址是否正确。点击Clone
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnQKnBpu-1605437020058)(assets/1573354374077.png)]
点击YES,Clone出远程仓储的工程,并且导入到idea中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AI1HCmVg-1605437020059)(assets/clip_image488.jpg)]
选择maven导入方式,直到操作完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WIo0ozeY-1605437020060)(assets/clip_image490.jpg)]
右键Git,可以与远程仓库进行push和pull代码操作了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cxBYVfCC-1605437020061)(assets/clip_image492.jpg)]
什么情况产生冲突?
|-- 同一个文件 User.java
|-- 同一行 第56行
|-- 出现了不同的代码,就会产生冲突
A. 小明 在User.java 第56行写了代码:9999999999, 提交了代码
B. 小丽 在User.java第56行写了代码: 66666666666, 也提交?
我们创建新的分支dev,并且在dev修改提交代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EXEtKrFL-1605437020062)(assets/1573355830861.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-levqiWuv-1605437020063)(assets/1573355020745.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LtQOXno6-1605437020064)(assets/1573355046092.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xt9v1kLl-1605437020065)(assets/1573356011912.png)]
说明: 提交代码到本地仓库。
然后在master修改提交代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RYAW92NI-1605437020066)(assets/1573356257610.png)]
修改GitDemo.java
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6u1TdQLk-1605437020067)(assets/1573356369295.png)]
提交代码到本地仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P4LhaEOq-1605437020068)(assets/1573356570175.png)]
接下来尝试合并dev分支
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-svoKGx7F-1605437020069)(assets/clip_image494.jpg)]
选择要合并的分支
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L5AX7gb7-1605437020070)(assets/clip_image496.jpg)]
发现合并失败,此时文件有红色标记
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-go8NhM4n-1605437020071)(assets/clip_image498.jpg)]
使用右键,菜单工具:Resolve Confilcts…
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qAgEXYuw-1605437020074)(assets/clip_image500.jpg)]
点击Merge合并策略:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vZgmgdQn-1605437020075)(assets/clip_image502.jpg)]
弹出一个对比页面
在Result中,手动合并完成后,点击Apply按钮,完成冲突代码合并。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c8YKJkAm-1605437020076)(assets/clip_image504.jpg)]
此时文件的红色标记没了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCV7U31K-1605437020079)(assets/clip_image506.jpg)]
但是有未提交的蓝色标记。然后提交,文件变为黑色。冲突被解决!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDSvYWey-1605437020080)(assets/clip_image508.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMEVgJU3-1605437020082)(assets/clip_image514.jpg)]
两种情况冲突:
1)在多个分支里面的代码冲突
1. 创建分支 dev
2. 第9行添加代码:1111
3. 提交推送
4. 切换到master分支
5. 第9行添加代码:2222
6. 提交推送 OK
7. 切换到master分支,merge合并分支dev,出现冲突,解决。
2)在一个分支里面的代码冲突
1. 开2个idea: idea1、idea2
2. 第一个idea: App第九行写下代码:11111 提交、推送 OK
2. 第二个idea: App第九行写下代码:22222 提交没有问题,推送有问题,冲突,手动解决
1)Git和SVN的区别
SVN是集中式版本控制,
Git是分布式版本控制
2)使用命令行使用Git
3)TortoiseGit使用Git
4)IDEA使用Git(重点)
以上三种形式都是学习:
1)创建本地仓库
2)添加并提交文件
3)查看日志,版本回退,代码撤销
4)多人协同开发(clone、push、pull)
5)冲突解决(拉取代码->解决冲突->推送代码)
git init 初始化本地仓库
git add . 把当前目录下的所有文件添加到暂存区(后续才可以提交)
git commit -m '提交日志' 提交并记录日志
git diff reamde 查看工作区与暂存区的区别
git status 查看文件状态
git log --oneline 查看日志
git reset --hard 0712188 回退版本
git checkout -- readme.txt 撤销工作区修改
git reset HEAD readme.txt 撤销暂存区修改
git remote add origin 仓库地址 本地仓库关联远程仓库
git push -u origin master 本地仓库内容推送远程仓库
git clone 仓库地址 克隆仓库,把远程仓库内容下载到本地(并自动初始化本地仓库)
git pull origin master 从远程仓库拉取资源到本地仓库
git branch 查看分支
git branch dev 创建分支
git checkout dev 选中分支
git push origin dev 推送分支到远程库
git merge 合并分支
git branch -d dev 删除本地分支
git push origin --delete dev 删除远程仓库分支(origin是别名,表示远程仓库的地址)
bsp;
但是有未提交的**蓝色标记**。然后提交,文件变为**黑色**。冲突被解决!
[外链图片转存中...(img-GDSvYWey-1605437020080)]
[外链图片转存中...(img-mMEVgJU3-1605437020082)]
#### 26.3 小结
两种情况冲突:
1)在多个分支里面的代码冲突
创建分支 dev
第9行添加代码:1111
提交推送
切换到master分支
第9行添加代码:2222
提交推送 OK
切换到master分支,merge合并分支dev,出现冲突,解决。
2)在一个分支里面的代码冲突
### 27、课程总结
1)Git和SVN的区别
SVN是集中式版本控制,
Git是分布式版本控制
2)使用命令行使用Git
3)TortoiseGit使用Git
4)IDEA使用Git(重点)
以上三种形式都是学习:
1)创建本地仓库
2)添加并提交文件
3)查看日志,版本回退,代码撤销
4)多人协同开发(clone、push、pull)
5)冲突解决(拉取代码->解决冲突->推送代码)
```java
git init 初始化本地仓库
git add . 把当前目录下的所有文件添加到暂存区(后续才可以提交)
git commit -m '提交日志' 提交并记录日志
git diff reamde 查看工作区与暂存区的区别
git status 查看文件状态
git log --oneline 查看日志
git reset --hard 0712188 回退版本
git checkout -- readme.txt 撤销工作区修改
git reset HEAD readme.txt 撤销暂存区修改
git remote add origin 仓库地址 本地仓库关联远程仓库
git push -u origin master 本地仓库内容推送远程仓库
git clone 仓库地址 克隆仓库,把远程仓库内容下载到本地(并自动初始化本地仓库)
git pull origin master 从远程仓库拉取资源到本地仓库
git branch 查看分支
git branch dev 创建分支
git checkout dev 选中分支
git push origin dev 推送分支到远程库
git merge 合并分支
git branch -d dev 删除本地分支
git push origin --delete dev 删除远程仓库分支(origin是别名,表示远程仓库的地址)