彩笔Java后端程序员速效GIT操作指南
说明:本文适合 没有用过GIT,或者没有参与过团队开发, 稀里糊涂入职,马上要开始干活儿的彩色笔兄弟。希望本文能够救你一命,不至于低三下四去询问邻座的牛马同事。
场景:领导丢你一地址https://www.pronhuab.com,让你在这个项目上拉项目,假如这时候你不知道怎么拉,那领导基本会让你收拾电脑滚粗了。
一.拉公司项目到IDEA上
拉远程代码的方式基本上有三种:
- SSH的方式
- HTTPS的方式。
- 直接下踏马压缩包儿
今天我们只说一下SSH的方式拉代码。
1. 桌面鼠标右键,选择Git Bash here(如图),前提你要先安装Git哈,草。
2. 输入指令(生成密钥)
ssh-keygen -t rsa -C "你的邮箱"
注意:-t 后面的东西,是你生成key的类型,你就先默认rsa,-C 后面引号的东西是备注,一般情况下公司会让你输入邮箱,这些东西领导都不交代,那就输入邮箱,草。
3. 复制生成密钥的文件路径
当出现这张图的时候,说明生成成功了,把这个路径复制出来(如图),用文本编辑器把这个文件打开,并复制全部内容!!
4. 复制密钥(刚才你复制的内容)粘贴到 “目的地”(如图),点保存,就Ok了
注意:这个目的地可以是阿里云,码云,反正是公司要求的远程SSH 管理端。
好啦,这个时候为后续上传代码啊,更新代码啊,打好基础了。
二.IDEA中提交代码
好了,这个时候,沙比领导需要你马上干活儿了,并扔给了你一个项目地址,通常
我们会把这个项目的dev环境的代码曰下来。
1.下载项目
1.1 先复制项目地址(如图)
1.2 按图操作,将地址直接放数字3的位置,然后点Clone,项目就可以开始下载了。
2.提交代码(Commit)
友情提示:代码提交之前,先把项目跑一下,看编译通得过不,也就是启动一下项目
写了一段代码之后,我们想要推到线上环境,这个时候,先Commit你的代码,如图。注意,这个时候最好问一下你的领导,commit 的评论内容,公司有格式规定没得,有的领导很事儿比,会要求提交的评论是英文啥的。
3.拉一下远程的代码(update)
这一步其实很关键,因为如果不进行这一步,有一定概率,在你后续Push代码的时候,造成冲突,就像你要给女神表白之前,最好确定一下她结婚没有
拉代码, 按着图示操作就行了,pull into Current Using Rebase 和 pull into Current Using Merge的区别我们后面再说,反正一般都选pull into Current Using Merge
4.推送代码
这一步就无法克说了,直接推就行了。
三. 屏蔽某些类/文件/文件夹,不推送(不纳入提交列表)
有的时候, 我们会在本地修改一些文件,但是我们又不想每次都把这些文件,纳入这个Defaut ChangeList。(例如下图,比如我们为了调试程序,修改了一下这个application.yaml配置文件的数据库连接地址,我们提交的时候,这个sb文件就会跑到我们这个文件夹下面,并且默认打了勾勾儿,如果,我说如果,我们提交代码的时候,没有取消勾选,那领导看到了,草,不骂人哦。)
好了,我说我知道的两种解决方法啊。
3.1.创建一个不提交文件列表
对着空白区域(或者上图,红框上面,Default ChangeList 点右键)-> New ChangeList -> 随便取个名儿,然后直接点OK!
哦,这样, 这个列表就创建好了,然后把不需要进行提交的类或者文件,直接鼠标拖进这个沙比列表就行了,这样的话,之后的每一次提交,你改的这个类或文件,就不会出现在Default ChangeList里面了。
你问我原理是啥? 你看上图,那个Set active 选项,创建这个列表没让你勾选吧,这样系统就会默认,即使你修改了这个,放进这个沙比列表的文件,这个文件或类也不默认勾选。(如下图,即使我修改了这个配置类application.yaml,我提交的时候,也只需关注Default ChangeList)
3.2.直接到IDEA 的设置里面去强行设置
例如,我们的配置类放在统一的一个文件夹下面(resources文件夹)(真实项目由于多个环境,真的很多个配置类,草),然后我们就按如下图步骤,去设置,直接屏蔽这个resources文件夹,无论你怎么修改,这些文件都不进入提交列表
File(IDEA最左上角!) ->Settings ->Editor ->File Types 再点忽略文件和目录(Ignored Files and Folders)中添加自己需要过滤的内容-> 添加完成之后按这个Apply->再点这个OK
好了,我再这里总结一下,如果只有一两个类或者文件需要屏蔽,很少,那么我们直接创建一个所谓的“不提交列表”,把需要屏蔽的类直接扔进去就行了。 如果我们需要屏蔽整个文件夹,那么,就直接去IDEA里面去设置。
四. 解决冲突
这种情况一般出现在 你和另外一个哥们儿改了同一个地方的代码(他先上传了远程代码库),然后你一拉远程的代码,就出现冲突了,(如图),这个时候,点那个Merge开始手动解决冲突就行了
4.1开始解决冲突
开始手动解决冲突!如下图中我已经说清楚了,直接点,那个绿色框框 的箭头,点!!就行了,实在不行按 Ctrl + Z 撤回重新点就行了。
五. 分支之间的切换以及stash技巧的应用
通常,我们在开发一个需求(新增某一个功能,或者更改某一个Bug)的时候,会单独拉一个分支出来开发(基于远程分支,创建一个本地的分支),步骤如图。 (假设目前我们需要基于开发分支dev来新增一个功能)
这样,我们就可以基于 远程的 dev 分支而创建的本地分支,进行代码开发的工作了,提交代码请参考第二大点(IDEA中提交代码)。
另外,我想分享一个stash代码的技巧。假如你写了一通代码,这个时候,突然需要你马上切换到一个bug分支或者需求分支,紧急的去开发。但是你又不想提交(Commit)代码,这个时候stash技巧应运而生!!
多说一嘴,如果你忘记了Commit代码,这个时候,你切换到另外的分支就会出问题了(如下图),IDEA 会弹一个贼几把烦的框出来,如果你点这个Force Checkout,你没提交的代码就没得了(也可以通过Local History找回来,但是麻烦得嘛)
1.stash 技巧
stash代码(如图)
这样我们就把LocalShitTwo分支未提交的代码,储存了起来,并将这次stash命名为xjb。然后你可以切换到其他分支,完成开发之后,再切回LocalShitTwo分支 ,把刚才stash的分支,放出来(也就是下面讲述的unstash技巧 )!
2.unstash 技巧
unstash代码(如图)
对着屏幕点右键 -> Git -> Unstash Changes -> 选择对应名称的stash -> Apply Stash(如图)
六. 吃后悔药(Git的撤回操作)
适用场景: 1.提交错代码。2.合并了错误的分支,并想回滚到合并之前的内容
6.1 新手回退基操之 Revert Commit
1.Alt+ 9(在IDEA中快捷键 ,打开IDEA 分支提交记录)
2.选中相应分支之后,右键,直接选择Revert Commit(作为菜鸟建议选择Revert Commit,而不是reset current branch to here)
3.Revert Commit 与Reset current branch to here 的区别
打一个比方: 你昨天打了你女朋友一耳光,Revert Commit相当于你给你女朋友买Gucci包,对现状进行修改,弥补,而Reset current branch to here呢,相当于你坐时光机回到昨天,不去打那一耳光。好了,我们来看一看人工只能是怎么回答的。
说得曰码哟文邹邹的,好了,讲点儿正儿八经的,一般我们生产实操中,是会经常用到Reset current branch to here,因为不排除你代码合错了啊,或者功能没写得好,需要全盘撤退啊。说到Reset current branch to here ,不得不讲到它的四种回退模式,把这四种模式弄门儿清了,GIT的回退操作,问题就不大了。看下面6.2的这个知识点。
6.2.版本回退的几个模式
我们对着某个分支的某个提交,点击 Reset current branch to here 之后,会弹出来几个选项(看下图),那这几个选项是什么意思呢?
1.Soft模式
首先,我开始三个准备工作: 1. 新增一个类:ShitBoy类,2. 修改Lover类的keyi属性名,改成keyigechuizi。3.提交并将本次提交备注为(commit One)
多说一句,绿色的类就代表,就是我新增的,蓝色说明我对这个文件进行了修改,橙色,代表此类或文件没有还没有被GIt 跟踪到(还没有add呢)
然后我开始回退操作了哦,还是熟悉的快捷键 Alt + 9 ,选择任意一个提交,然后右键,选择 Reset current branch to here,选择Soft 模式。好了,==注意两个点!!==看图。
1.我刚才修改的Lover类,以及新增的这个ShitBoy类,全部回到了暂存区(也就是回到了这个待提交的Default Changelist列表中)
2.上一次提交内容,Lover类,我修改的keyi->keyigechuizi ,以及新增的ShitBoy类,在我本地,仍然还是提交后的内容,似乎没有回退啊。
按理说,我回退了 ,就应该直接是 我提交之前的内容哇,好了,接下来我要说的Hard模式会达到你想要的效果,但是, 现在我说的这种模式,就是所谓的Soft模式。 就像这个Soft模式英文所介绍的那样: Files won’t change, differences will be staged for commit.
“后面想了一下,选这种模式进行回退,肯定是对目前已经推送的内容不满意,想修改!要是本地撤得一干二净,那我还改个锤子啊。”
2.Mixed模式
刚才咱不是回退了吗,然后演示这个 Mixed模式,还是做同样的三个准备工作:
- 新增一个类:ShitBoy类,
- 修改Lover类的keyi属性名,改成keyigechuizi。
- 提交并将本次提交备注为(commit Two)
然后我开始回退操作了哦,还是熟悉的快捷键 Alt + 9 ,选择任意一个提交,然后右键,选择 Reset current branch to here,选择Mixed 模式。好了,注意一个点!! 看图。
1.我刚才修改的Lover类,以及新增的这个ShitBoy类,只!有!修!改!的!Lover类回到了暂存区(也就是回到了这个待提交的Default Changelist列表中),然后我新增的ShitBoy类呢? 看下图,直接不受版本管理了 (回到了add之前的状态,相当于被他妈的抛弃了啊ShitBoy哥们儿)
总而言之,你选择了Mixed模式,就意味着你修改的东西,还是回到了暂存区,并且本地的东西,相当于还是提交之后的内容,但是你新增的东西,全部噶了,没得了。
想了一下,这种模式适合啥呢,适合开发者新增了某种功能(胡乱新增加了一些新的实现类,改了一些东西)。结果领导一声令下,不要这功能了,Ok,Mixed呗,新的类不急吧要了,改过的东西,我再改吧改吧呗
3.Hard模式
这个模式就狠了哦,想想就狠刺激,Hard!!! 好了,这个时候我要做四个准备工作:
- 新增一个类:ShitBoy类。
- 修改Lover类的keyi属性名,改成keyigechuizi。
- 修改Student的属性test名,改成testsjb,但是不提交!!!(仅仅本地修改)
- 提交ShitBoy类 以及Lover类的修改,并将本次提交备注为(commit Three)
然后我开始回退操作了哦,还是熟悉的快捷键 Alt + 9 ,选择任意一个提交,然后右键,选择 Reset current branch to here,选择Hard 模式。好了,==注意三个点!!==看下面两张图!
1.本地的这个Lover内容,直接撤回到提交之前的模样
2.暂存区(Default List )中,直接啥也没有了,改过的文件,新增的文件,都没有哒
3.即使是没有提交的内容,Hard模式也会不管三七二十一的给你回退掉!(这也是和Keep模式的唯一区别!)
4.人家Mixed模式,至少还给你保留了ShitBoy (Mixed模式 中的ShitBoy还可以通过add,整回去), Hard模式直接让ShitBoy 灰飞烟灭了
因此,总结一波哇,这个Hard模式真的要慎重选择,因为你一旦选择这个选项,本地的代码会回到当前提交之前的状态,暂存区乃至未被GIt跟踪的内存区域,都会被清空。狠!
这个模式适合,在公共分支,一个特二逼的同事,写了超级沙比的代码,直接把他妈服务器搞崩了,好了,这下在公共分支直接Hard模式Reset 吧,哈哈哈哈哈
4.Keep模式
好了,最后一个模式了,赵哥也写累了,写完这个Keep模式之后我要拿尖刀kill 年猪了。这个模式就狠了哦,想想就狠刺激,Hard!!! 好了,这个时候我要做四个准备工作:
- 新增一个类:ShitBoy类。
- 修改Lover类的keyi属性名,改成keyigechuizi。
- 修改Student的属性test名,改成testsjb,但是不提交!!!(仅仅本地修改)
- 提交ShitBoy类 以及Lover类的修改,并将本次提交备注为(commit Four)
然后我开始回退操作了哦,还是熟悉的快捷键 Alt + 9 ,选择任意一个提交,然后右键,选择 Reset current branch to here,选择Keep 模式。好了。Keep模式的效果和Hard模式差不多,就只有一点区别(如下图),刚才我把Student 类的test属性改名成了testsjb,我回退之后,本地这个类的属性并没有发生改变哇,也就是说,Keep模式不会回撤回你本地没有提交的修改内容
因此,Keep模式最终 达到的效果是:
1.本地的这个Lover内容,直接撤回到提交之前的模样
2.暂存区(Default List )中,直接 啥也没有了,改过的文件,新增的文件,都没有哒
3.没有提交(Commit)的内容,Keep模式会将其保留!(这也是和Hard模式的唯一区别!)
七 . Cherry Pick
使用场景: 我需要把我在A分支提交过的内容(或者多次提交的内容),也提交到B分支,这个时候CherryPick就可以用起来了
7.1.Alt+ 9(在IDEA中快捷键 ,打开IDEA 分支提交记录)
7.2.切换到目标分支!!!(如果你想提交到B ,那么先切换到B )
7.3.重新选择提交记录所在的分支,选择想要合并到目标分支的提交记录,如果有多个提交记录,长按Ctrl不要动 + 你想要选择的提交
7.4.对着选好的提交点右键,选择CherryPick,注意,Cherry Pick之前最好提交好当前分支的所有提交,不然后续会有一系列麻烦的操作
图解
注意 !如果当前分支(也就是提交所在分支)存在未提交的代码,会导致Cherry Pick失败(如下图),你要么提交了, 要么stash了
八.分支比较
分支比较是我个人工作实战中,较为常用的一个技巧。它的作用在于:
- 比较两个分支之间的代码差异。
- 差异填补,并且再次提交位于暂存区的代码
8.1.选择项目-> 右键 -> 选择并点击GIT->Compare With Branch
8.2.选择你想要对比的分支
8.3.存在差异类或者文件
8.4.操作存在差异的类或者文件
注意!这里就可以点击那个箭头进行当前分支文件的差异对比修改了,对比后的内容,会存在于暂存区,需要的时候,直接进行提交就行了
8.5.提交差异内容到当前分支
结束: 希望本文能够帮助到那些,才到工作岗位,手足无措,不想去麻烦旁边同事脸皮薄的朋友们。
版权归原作者 大足赵哥 所有, 如有侵权,请联系我们删除。