如何在idea上使用Git/Github的学习教程
寒假到了,又到了博主日常假期立flag,今天就做一个git学习笔记,用来记录和分享学习程序员必备技能之——git/github
首先,安装和配置git我就不多说了,网上教程多如牛毛。我这里要讲的就是,在安装完之后,怎么将实践结合起来学习git。
需要跟着我这篇博文一步步的实践就可以对git有所了解。
创建项目文件,对项目动一些手脚:
首先在idea里面创建一个简单的java项目,起名字叫TestGithub
在这里,我创建了一个Main文件,输出helloworld。然后呢创建了一个空的package,叫做pojo。
熟悉IDEA里面的命令行操作:
做完上面这些铺垫之后,首先我们要实践的内容就是,学会使用idea里面的命令行他在哪里呢?
这个就是idea里面的命令行,terminal是终端的意思。在这个命令行里面,我们相当于是打开了Windows里面的cmd命令行
我们可以执行一些熟悉的操作,比如:进入文件夹pojo/或者清屏ctrl+k
初始化一个Git空仓库:
在这里,我们使用git init这个命令来创建一个新的仓库,在下面的终端里面输入即可:
看到上面的注释;翻译出来就是“在F盘的XXX目录下,初始化了一个空的Git仓库”
比如上面这个,就是在src文件夹下面创建了一个包的同时,顺便把对应的git仓库也给初始化了,实在很赞的操作。
查看当前仓库的状态:
ok,创建完git仓库了,首先要学习的技能是查看这个git仓库的状态,输入这个git statue,查看当前仓库的状态
很显然,啥都没有,这个git仓库没有被commit过,这个文件夹也就没有历史版本。
那我们就搞点事情,让他有所记录,我们再看看这个仓库的状态是否有改变,我们再test1里面创建一个叫Person的类
然后再来执行上面那条git status的指令(按↑返回上一条命令)
显而易见,它提示了我,我创建了一个叫做Person的新文件。
但是注意这句话,
他的意思就是,我们有新建的但是未被提交的文件,这个状态在git里面叫做modified,否则我们在历史版本里面看不到我们刚刚作出的更改
ok,那么我们怎么样才能把文件提交呢。
★重点:文件的提交,和git仓库的三个状态(modified修改,staged暂存,commited提交)
在上述所提到的modified这种状态之后。
首先执行的操作是add,我们吧当前目录的所有文件add到一个“暂存区”,对应仓库这个概念的一个暂时存放你的代码的地方。这个状态在git里面叫做staged,这种状态作为提交之前的一个缓冲,我们可以在提交之前使用git status指令检查一下。
ok现在我们的代码就加入了暂存区,使用git add . 这个指令。
加入到“暂存区”之后呢,我们需要把项目提交到仓库里面,提交完成之后,这个状态叫做commited。commit会把暂存区里面的内容提交到仓库。如果再add.之后还有其他修改内容的操作,则不会加入仓库。
使用这个命令:git commit -m “这里填写注释” 如下:
可以看出,一个文件被改变了。
那么我们再来看git仓库状态,git status,启动!
没有需要提交的东西,所有的变动都已经保存!
查看我们每次的提交log:
上面执行了很多操作,我们这么查看我们的工作事项呢,这条语句:git log,启动如下
上面,我们就完成了对操作的记录,里面有操作人的用户名(github用户名)和时间,以及这个提交的版本写的注释“第一次提交...”
没退出查看的时候,你无法继续输入命令,我们可以按回车下拉,或者J(上翻)K(下拉),当然我们想退出查看,继续输入命令的时候,我们可以按Q(quit)退出继续输入命令。
git log 还有一个“极简模式”,就是使用一行输出一个commit。类似如下效果和语句,输出一行(oneline)
这个时候,我们再次的对项目进行一些改动,我们在原来的Person类里面添加了一个成员变量
这个时候,相当于是对这个项目进行了一些修改,我们来查看状态
上面提示了我们,这个类里面有修改的操作。但是这个时候,你把person这个类里面改动的东西恢复原样。那么,status就不会提示改动的操作,一切以你文件是否“原样”为标准来判断。
修改完成之后,我们保存当前进度作为一个历史版本,那么我们需要上述的add和commit二连combo
这样就完成了从“”暂存区”到git仓库的操作,我们就提交成功了第二个版本,使用log查看,就会提示两个commit版本
注意commit 后面的一串代码,这是一串哈希值,可以定位一个提交记录,只需要这一串的钱七位就可以找到一条提交记录。我们可以对这个提交进行详细的查看,使用指令:git checkout + 哈希值前几位(大于7位)
向下滚动我们就能看到详细信息,包括注释等...
当然,我们甚至可以更加详细一点,使用这个指令,git log -p
我们可以看到更加详细的信息,比如:你修改了啥,下面是一点点例子,其实还有很多
上面的意思就是在Person这个类里面,添加了一个成员变量。
给重要的修改加tag标签:
关于这个操作,我们需要另起炉灶,创建一个空的文件夹并初始化一个仓库。
cd进入test文件夹之后,在test里面创建一个文件,比如我创建了一个class文件叫做Book。
我们先对这个文件保存一下,也就是add commit 二连击——“ac二连击”,我们使用船新的版本的二连击招数:如下
一条更比两条强,添加提交两开花,莱啦老弟。
然后再动一些手脚,
完事儿之后再次“ac二连击”——暂存之后提交。
然后我们不厌其烦的再给这个类进行一些完善
继续暂存和提交二连击操作。
这个时候假如,我们觉得最近这一次的操作真的很重要,我们需要给这次的提交起一个名字比如叫做version1
那么输入如下指令
我们就给这次提交打上了标签,叫做version1
我们可以通过git tag这条指令来查看所有的tag,如:
还可以对之前的某次commit进行添加tag操作,只要获取到commit的7位以上的哈希值即可,语句如下
我们不仅可以查看历史的commit,我们还可以回溯到历史的commit去通过commit的标签名字,将历史某次的commit当作当前正在操作的commit,比如一个commit肥肠重要的时候。比如我想回到version0.5的这次commit进行一些操作
根据命令行提示,如下
注意最后一行,这个HEAD就相当于是指向当前正在处理的commit的一个指针,或者理解为文档处理的一个“光标”
通过log来查看,可以明显的看到,当前正在处理的commit就是标签为version0.5的这个commit
输出log,我们可以看到,当前正在处理的commit 并不是最近的commit(version1)
现在来查看log的时候,可以看到每个commit的后面都有标签信息
如果想查看tag的详细信息,我们可以使用tag show +“tag的名字”这个指令,比如:
如上,我们就可以看到全部的tag信息,包括时间和操作人......
分支 branch
当我们git init一个仓库的时候,这个时候就创建了一个分支,可以将它看作树干,他的名字就是我们常见的 master
当某个项目的节点之后,我们创建了另一个版本,相当于小说里面出现了另外一种剧情,倘若权力的游戏里面囧最后死了是一个版本的话,囧最后存活并当上七国之王则是另外一个版本,这两个版本就是两个分支,对应程序也是一样。
下面就来实践,首先创建一个空仓库:
进入并使用touch指令创建一个xyj.txt
我们可以在里面随便输入一点什么:
然后“ac二连击”,暂存-提交
再来点剧情,当作版本2。
继续ac二连击
这个时候我们可以想好这个txt小说,可能有两种版本,一个是西天取经,一个是西天取不到经。
在我们这次提交这个节点上,我们创建一个分支点叫做——xtqj。
在这分支点上,我们可以创建旁边的分支剧情,首先我们要进入这个分支点。
如上,我们就切换到了分支点switchpoint,我们可以修改结局为西天取不到经
在这次commmit之后,我们当前正在处理的commit之上,就有两个分支。
如上,当前正在处理的就是swithpoint之后的这次提交,叫做not get。
分支的作用是什么呢,比如说,master版本用来做正常的开发,但是当某次commit之后发现了一个bug,
那么这里就可以分支一个点,在分支的版本中进行bug修复。修复的同时不耽误其他功能的开发。
最后在同一时间内,既修复完bug,又完成了功能的开发,开发进度不耽误。
合并分支:
上一节实践了分支,当我们修复完bug并且完成功能的开发之后,我们需要把两个版本合并为一个版本,这样我们就需要做一个合并分支的操作。
我们另起炉灶,初始化一个test4的仓库,并且做下述操作:
对txt文章添加一个内容之后,我们保存为ver1
再添加一个2之后,我们保存ver2提交
来到阶段3,我们添加3之后,我们再次提交
但是这个时候我们发现在阶段2-3之间有一个bug发生,我们需要在ver2这个点,开始一个分支,首先我们要回到version1.0
这个节点上。
在这个节点上,我们把它设立为一个叫做point的分支点
同时进入这个点,当然我们也可以用指令git checkout -b point
到了这个点上,我们就能在这个版本上添加一些东西
然后我们ac二连击,就可以在point这个分支上,开始一次叫做debug的commit
提交完这次debug ,我们再次回到master这个分支上
可以看到我们的txt文件,变成了如下这样
我们再添加一些内容
commit之后,我们再来查看这个项目,就可以看到在ver2这里,有一个分支点point
现在我们就要实践这个合并操作了,我们就要用到git merge + 分支点的名字 这个指令
上面的信息提示我们有冲突,这个时候,我们来查看文字,就可以看到,从2开始,master版本的文字就是3和4,point分支就是debug ,我们需要手动解决冲突,
修改后
最后我们确认提交一下
我们图形输出一下,清楚的可以看到,两个分支最后合并为一条主线
部署到github服务端
前面所述的一些操作,都是在local本地端,但是如果本地的电脑遭到了降维打击,硬盘被拍扁了,那样的话,之前所有的操作都无法复原,那么我们就需要一个类似网盘的东西,叫做github。他可以每次我们commit之后都可以在服务端增量更新,而不是覆盖原来的上传版本。
首先打开github的个人主页中的your repository,(你得先注册登录),然后new一个远程repository
然后描述和命 名你的远程仓库
创建完成之后,我们能获取我们仓库的连接
复制这个连接,我们在idea的命令行里面输入下面这个指令,我们就可以把我们的项目上传到我们刚刚新建的远程仓库添加上去
我们可以使用下面这个指令,查看我们的本地git仓库都添加到了那些服务端
如上,指令提示我们添加了一个服务端,github。我们还可以查看详细信息
fatch是下载的地址,push是上传的地址
我们这个时候需要提交这份代码到这个远程仓库。
前面是服务端的名称,后面是需要提交的分支名称,我们这次提交的是master。
回到github这个连接,我们就可以看见我们的远程仓库中已经有了内容
我们可以再次添加一个book2.txt内容进去,再次提交再次push到远程服务器
这个时候我们提交完成之后,我们
那么如何拷贝一个github上面很好的项目到自己这儿呢?
使用这个命令 git clone+githubURL
比如:
这样我就在网上down了一个仓库下来,这个仓库里面可能是一个工程,项目的类型有可能和你当前的工作台的项目类型不一样,这个就需要我们手动来修改了。
获取仓库里面的最新代码。
我们可以使用git pull 获取当前任务远程仓库的最新版本。当我们做好一次提交之后,我们可以把我们的代码使用git push(默认只推送当前分支)或者 git push -u origin master(将本地的master分支推送到origin主机,同时指定origin为默认主机)来推送我们的代码到远程仓库中去。
当然,我们使用git pull获取仓库里面最新的代码,如果多人提交的代码有冲突。还需要我们自己手动调整。
这个功能可用于多人协作编程,比如张三写好了前端页面,push到远程仓库之后,李四可以pull出来最新的前端代码来给自己使用,git pull 这个指令就相当于是如下代码
意思就是获取并合并我正在编辑的代码。是不是很好理解。
总结,结合biaoyansu的网站内容,可以浏览一下上述过程提到的一些操作和关于git的概念。