超详细idea使用git 命令+图片结合教学

  • Post author:
  • Post category:其他

一开始接触git的时候,对git无从下手,对fetch、merge、rebase、pull、push这些是词干什么的完全不理解,现在做过几个项目,对git也有了一定的理解,用本篇文章总结一下。现在流行的代码托管平台有gitee和github,本文用到的是gitee

个人播客查看(体验感更佳)

一、创建远程仓库

idea对创建远程仓库提供了十分便利的操作,首先我们可以在idea上安装gitee插件,然后登录上自己的gitee帐号。最后只要点一个按钮就可以。

image.png

接着,我们在自己的gitee主页就能查看自己刚刚创建的仓库了。是不是特别方便🎉 。

在这里插入图片描述

二、拉取仓库

一般一个项目不是一个人完成的,团队中一个人创建仓库之后,其他人就要拉取项目了。对于拉取项目,idea不仅可以一键拉取,还能帮你格式化项目。使你拉取完之后就能运行项目。

我们只需要点击:新建->来自版本控制

image.png

就能拉取项目了。

克隆命令:

git clone url

三、正常的开发流程

正常的开发流程应该是每个人推送自己的文件,大家井水不犯河水,互相不修改别人的代码。

创建文件

当我们新建文的时候,idea会提示是否将文件add到暂存区

image.png

我们直接点击添加就可以了。

对于暂存区不理解的可以看一下这个图

命令git add

提交文件

当我们写完自己的代码想要提交到本地仓库的时候,我们需要点击

image.png

这样就会把我们的代码提交到本地仓库。我们可以加一些注释,这样我们以后可以很方便查看自己这次写了什么功能。

image.png

命令git commit

推送文件

我们可以点击这里的提交并推送

image.png

也可以点击

image.png

进行推送

命令git push

查看git日志

image.png

1:介绍本地的分支情况。

2:介绍远程分支的情况。

3:介绍推送记录。

4:介绍该推送更新了哪些文件。

5:

  • master:本地分支
  • origin/master:远程分支
  • HEAD:HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。HEAD 通常情况下是指向分支名的。在你提交时,改变了分支的状态,这一变化通过 HEAD 变得可见。

拉取文件

image.png

我们只需点击右上角的箭头即可拉取项目。

这里推荐变基,对于变基合并的区别,在带冲突的开发流程中详细介绍。

命令git pull --rebase或者git fetch;git rebase

这里稍微解释一下git pull

git fetch:下载远程仓库的提交

git merge:merge分支

git pull = git fetch + git merge

git pull –rebase = git fetch + git rebase

四、有冲突的开发流程

  1. 目录1

设想这样一个场景

你周一克隆了一个仓库,然后开始研发某个新功能。到周五时,你新功能开发测试完毕,可以发布了。但是 —— 天啊!你的同事这周写了一堆代码,还改了许多你的功能中使用的 API,这些变动会导致你新开发的功能变得不可用。但是他们已经将那些提交推送到远程仓库了,因此你的工作就变成了基于项目旧版的代码,与远程仓库最新的代码不匹配了。

这种情况下, git push 就不知道该如何操作了。如果你执行 git push,Git 应该让远程仓库回到星期一那天的状态吗?还是直接在新代码的基础上添加你的代码,亦或由于你的提交已经过时而直接忽略你的提交?

因为这情况(历史偏离)有许多的不确定性,Git 是不会允许你 push 变更的。实际上它会强制你先合并远程最新的代码,然后才能分享你的工作。

咱们来模拟一下这个场景,我把一个项目推到远程仓库,然后再新建一个项目拉下来,来模拟两个用户。

这个ccpc里的代码作为用户一写的代码

image.png

这个ccpc2里的代码作为用户二写的代码

image.png

然后 用户一推送这样一段内容

image.png

这时候用户二不知道该文件已被修改用户二也对该文件进行修改

image.png

这时候如果点击推送毋庸置疑会失败的,她会这样提示我们

image.png

idea提示我们进行变基,那我们就点击一下变基:

image.png

咱们通过前边的小例子说过了,当你尝试修改别人修改过的文件,git会强制让你与远程仓库里的代码整合,对于你们同时修改的代码,git会询问你是选择你自己的还是其他人的。这里我暂且选择接受他们的。这样相当于你的代码白写了。

整合之后这个时候再进行推送是能推送成功的。然后直接推送。

我们再让用户一修改代码:

image.png

因为刚刚用户二也推送了,所以这个时候推送同样是会冲突的。我们这次同样点击变基,不过这次点击接受您的

image.png

我们再观察git日志

image.png

发现master(本地分支)与orgin/master(远程分支)分离了,这代表我们本地仓库是最新的状态,远程仓库是用户二提交的状态。我们直接点击推送,就能再次让本地分支与远程分支保持一致。

image.png

我们再次让用户二修改代码

image.png

再次推送,同样再次被拒绝,不过咱们这次不变基了,咱们点击合并

image.png

然后选择接受他们的

image.png

我们再来观察一下git日志

image.png

发现了一个奇怪的情况,竟然分叉了,这是什么原因呢?

对你猜的没错,正是因为你选择合并的原因。这是合并和变基的提交记录的区别。

这个时候点击推送同样是可以推送上去的。

然后我们再让用户一修改代码

image.png

同样是被拒绝同样是点击变更,这次我们选择接受您的,结果和接受他们的一样的,这里就不演示了。

合并

合并(git mergen)即把两个节点合并到一起,如下图所示,合并c2,c3:

image.png

image.png

合并会让两个不同的分支分开,使哪个结点是哪个分支提交的显示的更加清晰

ps:咱们团队开发的时候,每次推送都相当于一次本地分支与远程分支的整合。

变基

变基 (git rebase)。变基实际上就是取出一系列的提交记录,**“复制”**它们,然后在另外一个地方逐个的放下去。

Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰

如图所示

image.png

image.png

五、新建远程分支和本地分支

如果想建立新的分支也是很简单的,只需点击新分支就可以了:

image.png

如果想切换分支只要点击牵出就可以了

image.png

六、总结

了解了以上的操作基本就入门了,还有很多骚操作我就不一一演示了,大家自己去发掘吧。