目录
一:Git 分支操作
1. 什么是分支
2.分支的好处
3. 分支的操作
二:Git 团队协作机制
1. 团队内协作
2.跨团队协作
三:GitHub 操作
1.创建远程仓库
2.远程仓库操作
3.跨团队协作
4. SSH免密登录
一:Git 分支操作
服务器运行的模式,从右往左看:
1. 什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时 候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是 一个单独的副本。(分支底层其实也是指针的引用)
例:假设现在已经有一个master分支在运行了,我需要添加新的功能,那就需要从master分支复制一份到feture-blue分支进行开发(master分支用户还可以正常使用),开发以后在与原来的master分支合并一下即可;如果此时合并后导致程序运行出现错误,此时在从mater分支引申出来一个hot-fix分支(热修分支),交给测试人员测试,测试完成以后,在合并到master分支!
2.分支的好处
①同时并行推进多个功能开发,提高开发效率。
②各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
3. 分支的操作
(1)查看分支
基础语法
git branch -v
案例实操
*代表当前所在的分支,*在那个分支前面,就代表当前指定的是哪个分支
(2)创建分支
基础语法
git branch 分支名
案例实操
再创建一个分支hot-fix!
此时再次查看当前的分支结构
(3)切换分支
基础语法
git checkout 分支名
案例实操
此时修改Hello.java,此时就需要重新添加到暂存区、提交到本地库!
(4)合并分支
基础语法
git merge 分支名
案例实操
把hot-fix分支合并到master分支!
注:是把指定的分支合并到当前分支上,所以此时应该在master分支上!
此时在master分支,查询Hello.java文件
(5)产生冲突
冲突产生的原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个,必须人为决定新代码内容。
第一步:首先在master分支,修改Hello.java,进行add和commit
第二步:切换到hot-fix分支,修改Hello.java,进行add和commit
第三步:切换到master分支,进行合并,此时两个文件都是修改的,就会发生冲突
查看文件的内容,也会提示那个地方冲突了
(6)手动解决冲突
第一步:手动合并代码,并add和commit
第二步:此时进行修改了,需要进行commit,会出现一个致命的错误
如何解决?不要带文件名!
第三步:查看Hello.java,已成功合并
此时切换到hot-fix分支,查看Hello.java还是原来的内容
注:产生冲突后只会修改要合并的分支上的文件内容,被合并的分支内容不变!
总结:master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD指针决定的。所以创建分支的本质就是多创建一个指针;所以切换分支的本质就是移动 HEAD 指针。
二:Git 团队协作机制
1. 团队内协作
首先岳不群先把华山剑法推送到(push)代码托管中心(远程库),此时令狐冲把远程库的华山剑法完整的复制克隆下来(clone),此时令狐冲发现华山剑法有缺陷,进行学习修改完善后,再次push到远程仓库(此时推送push,需要岳不群给权限才可以)!此时岳不群在通过从远程库拉取(pull)更新自己的本地库!
注:clone和pull的区别
git clone:是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地(即将远程库整个下载到本地),是一个本地从无到有的过程。
git pull:在本地有版本库的情况下,从远程库获取最新commit 数据(如果有的话),并merge(合并)到本地。
2.跨团队协作
此时是令狐冲找到了自己的好朋友东方不败进行修改,不是同一个团队的人;此时东方不败通过fork(叉过来),把岳不群的远程库复制一份到东方不败自己的远程库,此时东方不败用的是自己的远程库;进行克隆clone到本地库进行修改!修改好以后push到东方不败自己的远程库,然后如何在发送到岳不群的远程库呢?此时需要发一个请求(pull request)给岳不群,需要审核,然后合并(merge)过来。最终岳不群就可以pull到自己的本地库进行修炼了
三:GitHub 操作
GitHub 网址:/
1.创建远程仓库
先注册登录GitHub
创建远程仓库
输入远程库的名字,尽量与本地库保持一致
创建好远程库以后,有两个链接:HTTPS连接方式和SSH连接方式
2.远程仓库操作
(1)创建远程仓库别名
(1)基本语法
git remote -v 查看当前所有远程地址别名 git remote add 别名 远程地址
(2)案例实操
(2)推送本地分支到远程仓库
(1)基本语法
git push 别名 分支
(2)案例实操
第一次推送会卡在哪里,等待页面的跳转让我们进行授权
如果本地还没有过SSH免密登录操作(后面会讲),则在执行命令后会弹出一个Connect to GitHub
的提示框
点击Sign in with your browser,
如果你的 GitHub 尚未进行过任何 Git 相关授权,则会给出确认授权提示信息,点击Authorize GitCredentialManager
进行授权即可
授权成功后,成功推送本地分支至远程库(如果一直推送不成功,关闭无线网,使用手机热点)
(3)拉取远程仓库到本地
例:当远程库的内容与本地库不一致时,需要重新拉取到本地库!(此时远程端增加了一行代码)
Hello Git 11111111Hello GitHello GitHello GitHello Git master testHello Git hot-fix test1111111111111
(1)基本语法(和推送是对应的)
git pull 远程库地址别名 远程分支名
(2)案例实操
查看本地库的代码
(4)克隆远程仓库到本地
(1)基本语法
git clone 远程地址
(2)案例实操
创建一个新的目录(git-hlc空目录),模拟一个新的用户去克隆远程仓库到本地!
注:克隆代码是不需要登录账号的!
注:远程仓库地址不能使用别名了!
此时不仅仅是把Hello.java代码克隆过来了,而是把整个仓库克隆过来!
总结:实际上克隆会做三件事!
①拉取代码。
②初始化本地仓库。
③创建别名(创建的默认别名叫做origin)。
(5)团队内协作
解释:对于仓库是岳不群自己的,令狐冲可以直接clone到自己的仓库,不需要任何验证和密码;但是如果令狐冲想要推送到岳不群的仓库中去,就需要先被邀请加入团队才可以!不然就是权限不够!
选择邀请合作者 (添加合作的用户名到自己的项目团队)
添加成功后,会有一个邀请函
然后令狐冲用户需要登录自己的github账户,复制这个邀请函地址到地址栏,接受邀请即可!
再次进行推送
3.跨团队协作
第一种方法:直接个根据地址fork(叉)过来
①将远程仓库的地址复制发给邀请跨团队协作的人,比如:东方不败。
②在东方不败的 GitHub 账号里的地址栏复制收到的链接,然后点击 Fork 将项目叉到自 己的本地仓库。
叉成功后可以看到当前仓库信息。
第二种方法:东方不败也可以根据项目名称直接进行搜索,加上账号可以更加精准的定位!
③东方不败就可以在线编辑叉取过来的文件
进行编辑修改
④编辑完毕后,填写描述信息并点击左下角绿色按钮提交
⑤接下来点击上方的 Pull request(拉取请求),请求去push到岳不群的远程库
并创建一个新的请求(绿色的是修改的代码,被标识出来)
⑥回到岳不群 GitHub 账号可以看到有一个 Pull request 请求(记得要先刷新)。
进入到聊天室,可以讨论代码相关内容。
⑦如果代码没有问题,可以点击 Merge pull reque 合并代码。
4. SSH免密登录
我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。
首先找到当前用户的家目录(删除以前生成的密钥.ssh文件夹)
在当前用户的家目录下,进入git bash,进行密钥生成的操作(重新生成.ssh文件)
ssh-keygen -t rsa -C 邮箱
重新生成.ssh文件,里面包含公钥和私钥(把公钥的内容进行复制)
然后点击用户头像→Settings→SSH and GPG keys
出现以下界面,表示添加成功
以后使用SSH连接就不需要登录验证了!