一、什么是git
学习目录:
一、git概述
1.1、git简介
1.2、git下载与安装
判断git是否安装成功:
二、git代码托管服务
2.1、常用的git代码托管服务
先要明白什么是git代码托管服务:
也就是我们知道git有两个仓库,一个是我们本地的仓库,一个是远程仓库,那么我们如何搭建远程仓库呢,就需要我们用git代码托管服务。
下面有几种常用的git代码托管服务:
使用码云git代码托管服务步骤:
步骤如下所示:
1、注册码云账号
2、登录码云
3、创建远程仓库
补错:上面的那个地址换成下面的点击创建按钮后,创建好生成的git地址
我们还可以在个人主页查看我们创建了几个仓库:
4、我们创建好远程仓库后,那么我们就是管理员(老大),因此我们就可以邀请其他人成为我们远程仓库的成员,那么就可以一同操作远程仓库了:
三、git常用命令
3.1、git全局设置
注:如何开启git命令窗口:
e: 随便打开一个目录(然后点击Git Bash Here)即可,操作如下所示:
3.2、获取git仓库 (也就是说创建本地仓库)
3.2.1、第一种:在本地初始化一个Git仓库步骤
3.2.2、第二种:从远程仓库克隆
首先我们知道,在远程仓库中,我们每个创建的远程仓库都有一个地址:比如我们的hellogit远程仓库:
我们只需要复制这个地址,然后执行命令:git clone,即可把远程仓库克隆到我们本地当中。
注意:我们本地的每个.git仓库都不能放在同一个文件夹下,如我们刚才用第一种方式创建的
git仓库是在resp1目录下的,那么我们再创建/克隆仓库的时候,就不能再放在resp1目录下了。
四、工作区、暂存区、版本库概念
版本库:
工作区:
暂存区:.git目录下的一个index文件就是暂存区。
4.1、git工作区文件的状态
总结一句话:开发的代码就相当于快递,然后我们通过命令可以查看这些快递的状态,是运行中呢还是还没发货呢,意义是一样的。
演示如下: 我们知道刚才我们的helloworld开发代码,还没有通过命令把开发的代码保存到暂存区,因此我们通过命令就可以查看一下该开发的代码状态:
git status 就可以查看刚才我们开发的代码的状态了:
注意:
五、git本地仓库操作常用命令1
注意:版本库就是我们的本地仓库。(我们项目代码如果想推送到远程仓库进行管理的话,就需要进行下面几个方式,进入到版本库后(也就是本地仓库)才能推送到远程仓库中)
我们就以刚才的helloworld文件为例演示如下所示:
1、查看helloworld代码文件的状态(看是否已经被git管理了还是说还在暂存区里面保存着):
2、因此我们可以通过git add命令,将该代码添加到暂存区保存:
3、注意:当已经保存在暂存区的代码通过git commit命令提交到版本库(也就是说git库)的时候,再查看该代码状态是什么也不显示了:
4、已修改状态,就是当我们比如说修改了helloworld.java的代码,然后再通过git status命令查看该代码的状态时,就会显示已修改状态:
六、远程仓库常用命令1
注意:只要是要向远程仓库进行一些操作的时候,先通过命令看一下本地仓库是否和远程仓库建立关系了,然后再进行一些操作。
注意:我们这些执行命令窗口,必须要在不同的.git所在的目录中(也就是工作区,专门存代码的)打开命令窗口。
1、git remote命令:
查看本地仓库(如上面的hellogit就是本地仓库)和远程仓库建立联系的演示如下所示:
查看本地仓库和远程仓库没有建立联系的演示如下所示:
2、git remote add 添加远程仓库命令:
也就是说当我们本地仓库和远程仓库之间没有创建联系的时候,就可以用这个命令,让本地仓库和远程仓库之间建立联系。(注:哪个本地仓库建立联系,就在哪个本地仓库的工作区打开命令窗口,如hellogit本地仓库没有和远程仓库有联系,那么就在hellogit的工作区打开命令窗口进行建立联系)
注:url就是码云上面远程仓库的地址, shortname我们通常写成origin。
3、git clone 从远程仓库克隆命令:(上面已经写过(把远程仓库克隆到本地仓库中))
4、git push 从远程仓库拉取命令:
注:remote-name 我们通常写成 origin克隆, branch-name写成master
5、git pull 从远程仓库拉取命令:
总体的思路如下所示:
假如我们的远程仓库如下所示:
此时有两个开发人员小黑/小白都克隆了远程仓库:(也就是说自己本地仓库名称用的也是远程仓库的名称hellomrliu,并且本地仓库也和远程仓库建立了关系了)
此时开发人员小黑假如想在远程仓库中拉取远程仓库中的数据(拉取远程仓库之前最好先用命令判断一下本地仓库是否和远程仓库建立起来了关系):
我们知道此时开发人员小黑的本地仓库中的数据是和远程仓库中的数据一致的,因此就拉取不出来数据了。
假如开发人员小白此时修改了一些项目代码然后也提交到了该远程仓库当中,那么开发人员小黑再拉取远程仓库中的数据的时候,就可以把修改后的远程仓库中的数据拉取到自己本地仓库了,(也就是说开发人员小黑/小白两人就可以获取拉取对方的代码数据了,只不过远程仓库就是一个桥梁)
小白的步骤就是:把修改的代码先保存到暂存区、然后提交到版本库(本地仓库),然后把本地仓库中的代码推送到远程仓库中,最后小黑就可以再拉取远程仓库中的数据(也就是小白推送的数据)到自己的本地仓库中了。这里不再演示命令操作。
注意:拉取远程仓库数据 fatal:refusing to merge unrelated histories报错问题
问题描述:
也就是说,我们本地仓库不是克隆的远程仓库的,而是我们手动创建的本地仓库,并且该本地仓库当中也有一些我们的开发代码,此时我们本地仓库与远程仓库创建关系后,想拉取远程仓库中的数据,那么此时就会报错(因为当时我们手动创建本地仓库的时候我们本地仓库中是有一些代码的,再拉取远程仓库的数据时是不能合并数据的。)
解决方式:
就是在拉取命令后加入参数: --allow-unrelated-histories
加入好这些命令后,就点击空格运行即可,会出现如下命令框:
那么操作完上面三步后,我们手动创建的本地仓库就拉取到了远程仓库中的数据了。
七、分支操作命令【重】
我们就以新建的test1远程仓库为例进行操作:
我们的本地仓库(克隆的test1的远程仓库):
因此我们在本地仓库就可以演示相关的分支命令了:
1、git branch 查看分支命令:
2、git branch [name] 创建分支命令:
也就是说在本地仓库中创建一些除master分支外的其他分支。
因此我们知道,如果显示绿色就代表当前的操作是在绿色的分支下进行操作的,因此我们也可以进行切换分支。
3、git checkout[name] 切换分支命令:
4、git push [shortName] [name] 推送至远程仓库分支命令:
注意:只要是要向远程仓库进行一些操作的时候,先通过命令看一下本地仓库是否和远程仓库建立关系了,然后再进行一些操作。
因此我们就可以把我们本地仓库中的其他的分支(刚创建的b1、b2分支)推送给远程仓库(但是要注意:本地仓库和哪个远程仓库建立的联系,这些分支就推送给哪个远程仓库)
那么估计就会问了,这些分支能有什么用处呢?
当然有很大的用处,用处如下所示:
此时远程仓库:
并且当我们本地仓库切换分支的时候,精彩之处如下所示:
因此我们也可以在本地仓库的b1分支下写一些代码,然后通过提交到本地仓库中然后推送到远程仓库的指定分支中,那么远程仓库的那个分支中就有了我们本地仓库b1分支下写的这些代码了:
5、git merge [name] 合并分支命令:
也就是说:把b1分支下的代码和b2分支下的代码合并到master分支当中去。
因此实现做法如下所示:
首先要先在命令窗口回到主分支master下:
然后通过命令把b1分支合并到master分支即可(那么b1分支下的代码就在master分支下了):
注:当我们输入完合并命令后,会进入一个新的命令窗口:
同理通过命令再把b2分支合并到master分支即可:
eg:分支合并冲突问题
冲突问题产生的原因:
也就是说,我们上面已经知道 master分支下已经合并了b1分支和b2分支的代码了(b1分支下的代码:b1test.java,b2分支下的代码:wadwadwa.txt),合并完之后我们知道,在master分支下也有了b1分支下的代码和b2分支下的代码了,如果我们同时在master分支下和b1分支或者b2分支下修改代码的话,那么就会产生分支合并冲突问题(也就是说,我们知道master分支合并到了b1分支下的test1.java代码了,如果我们同时在master分支下和b1分支下修改此test1.java代码,然后又把该在b1分支下的这个修改的代码合并到master分支下那么就会发生冲突问题)
演示如下所示:
注意:这个master主分支修改完合并过来的b2分支下的代码的时候,一定要先将该修改的代码保存到暂存区,然后到本地仓库推送到远程仓库的master分支当中。如果这一步不先推送到远程仓库当中的话,冲突问题是演示不出来的。
并且b2分支也修改完代码之后,也要先推送到远程仓库的b2分支下(一定要做)
上面的master分支和b2分支都对其代码修改了一次然后推送到远程仓库中后:
我们这里在master分支中通过命令又将b2分支合并到master分支时就会出现和平冲突问题了:
因此我们该怎么解决这个自动合并失败冲突问题呢:
我们就可以手动进行解决,我们知道我们是将b2分支下的代码合并到master分支下的,因此我们就在master分支下打开那个合并的代码:
然后我们手动处理好之后,就可以把master分支下的该修改好的代码在本地仓库推送到远程仓库当中去了:(推送过程中会出现下面的问题)、
因此我们只需要在该命令下加个 -i 即可解决问题:
八、标签操作
注:为了防止标签和分支区分不开,因此标签用到再说。
九、在idea上使用Git
一、在idea中配置git
1、第一步:将git路径加载到idea上
2、第二步:获取Git仓库
和我们用命令的时候是一样的,两种获取Git仓库方式:
1、本地初始化仓库 2、从远程仓库克隆
第一种:本地初始化仓库
踩坑:一定要注意啊如果使用本地初始化仓库的方式然后将项目代码推送到远程仓库时,远程仓库千万别初始化readme文件
因此这也是我们初始化git仓库的时候,为什么拿项目名为本地仓库,就是因为我们以项目名的话,那么我们在这个项目中写的所有代码都相当于在工作区写的了,也就是说这些工作区中的代码都可以通过git ada命令存入到暂存区,然后到版本库最终推送给远程仓库进行保存管理了。
初始化本地仓库创建好之后,我们的idea也会发生如下的变化了:
第二种:从远程仓库克隆
点击克隆之后,我们就会发现会以我们克隆的地址名为项目名从新创建了一个新的idea项目:
并且我们发现在我们指定的worksprace/test1目录下确实创建成功了本地仓库(克隆的方式):
注意:.gitignore文件的作用
十、idea中操作本地仓库
我们知道我们使用命令窗口的时候,是通过 git add * 的方式将代码数据加入到暂存区的,然后通过 git commit 命令 将暂存区中的代码数据提交到版本库(本地仓库)中的,最终推送到远程仓库的。
那么问题来了,在idea上怎么操作呢?
1、将文件(代码数据)加入暂存区:
必须首先要保证我们的项目的代码是在.git同目录下的(看看项目目录下有没有.git)有的话就说明这个项目可以准备加入暂存区了。
假如我们没有点击Add,点击了Cancel或者×, 那么就说明此代码没有保存到暂存区当中:
要是我们又想让上面红色的test02代码保存到暂存区进行保存呢,该怎么办,操作如下:
点击完Add后,即可将test02代码加入到暂存区进行保存了。
2、将保存在暂存区中的代码文件提交到版本库(本地仓库):
也就相当于我们使用命令窗口时的 git commit 命令。
然后点击Commit即可提交到版本库当中了,(这个Commit and Push按钮是直接提交到版本库然后推送到远程仓库中去了。)
十一、idea中操作远程仓库 & 分支操作
操作远程仓库:
1、查看远程仓库
也就是说我们使用 git remote命令, 用于查看我们本地仓库和哪个远程仓库创建了关系。
再次强调: 我们这个项目gitdemo名就相当于本地仓库了,因为.git所在的目录名就是gitdemo,
因此gitdemo目录下就是工作区,就可以说gitdemo就是本地仓库了。
在idea上该如何查看本地仓库与远程仓库之间是否建立了关系了呢:
如果我们点击后没有显示和哪个远程仓库建立了联系,那么我们就可以点击上面的加号把远程仓库的地址复制进来,那么就能把这个本地仓库和复制过来的远程仓库建立联系了。
2、把本地仓库中的数据推送到远程仓库
如果在推送后出现以下的警告提示:
解决:
命令:git pull origin master --allow-unrelated-histories
最后我们再在idea上push就能成功了,就能把本地仓库的数据推送到远程仓库当中了,并且我们远程仓库中确实有了本地仓库推送的数据了。
3、从远程仓库拉取代码到本地仓库
分支操作:
1、查看分支
除了上面的这种方式外,还有一种快捷方式:
2、创建分支
3、切换分支
4、将分支推送给远程仓库
5、合并分支
我们现在就是把b1分支合并到master分支下,也就是说把b1分支下的代码合并到master分支下:
这里把b1分支下的代码合并到master分支之后,我们就再把这个master分支下的代码提交推送到远程仓库即可,就能把这些代码被远程仓库管理起来了。