idea上操作git的一些方法和技巧

idea是java程序员开发常用的工具,在idea上进行版本管理也是常用的操作,因此将我工作中常用的一些基础操作整理一下,本人尽量做到结果准确,逻辑严谨,语言通顺,但难免有错误之处,希望大家留言更正,也欢迎联系作者进行探讨

1.新建一个项目,添加git

VCS→Import into Version Control→Create Git Repository
四角就会出现git的图标

2.关于reset

背景:提交到本地仓库1234四个版本,分别按时间顺序,然后reset到2,
1)选择hard,工作区中的代码也会变为2的版本,但是历史记录中看不到3和4了
2)选择soft,工作区中的代码不会变,可以提交为新的版本,记录看不到3和4了
3)hard=soft+一次rollback
4)reset时切忌要选对分支,否则会出现难以理解的情况!
5)reset远程分支的方法:先本地reset,然后force push到远程,切忌一定要force,否则会触发merge

3.关于revert

1)如果revert 2,目前我观察的是把2的parent即1和当前工作区进行冲突解决
accept theirs 即接受1
accept yours 即把1和当前工作区进行冲突解决
然后作为"revert2"这个版本的提交结果

4.如果有1234四个版本,我想回到2然后再重返4

只能把2单独开新分支

5.提交项目的正确方式

自己本地开2个分支,一个develop,一个devolop/dev
develop直接pull更新代码,得到其他人提交的最新版
然后自己在devolop/dev上开发,然后merge到develop上,一旦merge出现混乱,不至于影响远程,可以重新拉
最后都弄好了,再将develop push到远程
杜衡说的是自己各自在远程维护自己的分支,然后想合并时提交给上级,由他检查合并

6.关于checkout(切换分支1到2)

1)1没有未提交的代码时,工作区代码会变成2分支代码
2)1有未提交代码时,会弹出对话框force checkout smart checkout don’t checkout
选force checkout,1的代码会强行变成1最末已提交版本的代码,1未提交的消失;2的代码不受1影响
选smart checkout,1工作区中的代码会融合到2,这时2被融合算更改,若未提交再切回1,还会出现3个选项
选don’t checkout,会取消本次checkout,继续留在1分支,未提交的也继续留在工作区
3)如果1和2是同版本的,则自动会将1未提交的代码带到2,不会有任何提示;所谓同版本,就比如说,1是以2为模板复制出来的分支,且1没进行过任何提交,和2当前的版本一致

融合:
融合时会根据内容产生不同的效果,有的时候直接就融合结束了,有的时候会出现一个三方融合框,其中左边your uncommitted changes是你未提交的代码;中间result显示你源分支最末已提交版本代码,右边changes from remote是目标分支的最末已提交版本代码;左右两边是不能更改的,只有中间可以改,作为最终的提交;accept left和accept right分别接收左右两边直接就会结束,continue merge相当于关闭2级对话框,继续进行,apply就是接受中间的结果(随意更改后的);点击abort或右上角的×都会弹出2级对话框,abort and rollback skip continue resolve,continue resolve就是关闭2级对话框继续进行,abort and rollback就是接受了目标分支最末已提交版本代码,skip也是接受目标分支最末已提交版本代码;代码区左右箭头的作用和accept left,right一样,×就是关闭红色的区域,接受了一边另一边的箭头就会指向下方,这时选的话会直接叠加到代码底端,不会考虑是否重复,需要手动更改,也可以自己新添加,然后apply

结论:
1)切分支时,未提交的部分一定消失;
2)选smart checkout会merge到新的分支

7.rollback的作用是恢复到最末已提交版本代码

8.关于merge

1)在当前代码右键git—repository—merge changes,选择或填写目标分支名字,是把目标分支融合到此分支;或者点左下角的git,切换到主动发起merge的分支,然后再右键一个目标分支(被融合分支),选merge into current
2)融合时也会出现accept和之前意思一样,merge打开融合框;这个根据不同情况弹出的框不一样,详见11
3)融合后,系统自动commit,不需要手动commit,线路图会汇合在一起
4)融合后再次想融合就选不到目标分支了,只能融合一次
5)融合后ctrl+z和ctrl+y没有效果,只是当前工作区代码回退,但是版本已经提交了,只是产生新的可以提交的代码而已
6)路线图中的merge节点文件查看打开的界面是三方的
7)融合之后,被融合的分支不会消失,还可以自动切换
8)merge改变的是主动发起merge的分支,所以想reset也要切到主动分支上,被融合的分支不变
9)merge之前若当前分支有改动未提交,则会提示失败,不允许merge
10)同版本的无法merge,下拉框看不到
11)有的时候merge,所有的内容都改了,还有新增,但是merge根本不显示冲突,直接完成,而且路线图不合并??????
原因是这么回事,实际会把你当前分支最后的工作节点,被merge分支最后的节点和他们共同的父节点做一次三方合并,这里又会引出三种情况:
A.若主merge节点相对父版本节点有变化,被merge节点无版本变化,则没法merge,因为选不到被merge节点
B.若主merge节点无变化,被merge节点有变化,则直接将被merge节点的内容替换掉主merge节点,不会出现冲突框,路线图也不会合并
C.只有双方都偏离父节点,这里又分三种情况:
C1.若修改的内容不一样,但连上了,才会来一次三方冲突框,路线图会合并;
C2.若两个内容恰好完全一样,则不会有冲突框,但是路线图会合并
C3.若修改的内容不一样,但没连上,则直接合并,没有冲突
这也明白了为什么有的分支不显示出来,就是必须得相对父节点都改变的两个分支才会显示出来,即两条线上都有点,否则一条没点的线那就和主线是一条线

12)merge完成后,被动分支从父节点分离后过程中的全部历史节点,都会显示在合并后的分支中
13)merge弹出解决冲突框后强行关闭,工作区会变混乱,这时rollback一下就好了
14)今天发现的一个问题(20210626),当一个低版本的分支,并且在当前路线图上存在,是无法merge到当前节点的,你merge会提示已经up-to-date,并让你删除低版本的分支

9.关于push

1)先在远程创建一个空项目,记住URL
2)提交的时候本地的全部版本都会提交上去
3)提交到远程的时候只会提交commit的,没commit的不会提交上去
4)idea从分支提交,会自动在gitlab上创建一个一模一样名字的分支
5)没有改动的话多次提交选择不了内容不会对远程有影响
6)develop push到master会被拒绝?????
7)远程的分支和本地的已经各自不同版本时,push会触发一次merge,会改变本地的,不会改变远程的,再次push才会改变远程

10.关于pull

1)若本地代码版本高于远程,则会提示All files are up-to-date,已经是最新版,无法更新
2)若本地的代码改了,但没commit,这时从远程高版本pull的话,会提示pull failed
3)若本地的代码也有新的commit,但是和远程不是一个分支,例如提交远程后,自己回退了几个版本,然后又提交了新的版本,这时从远程pull会触发merge规则
4)右上角的更新就是pull?
5)fetch到底有什么作用?成功了但没任何变化
6)右上角的蓝色向下箭头意思似乎是从对应的远程分支更新到本地;而项目右键—git—repository—pull可以从不同的远程分支更新到当前本地分支

11.关于创建分支

1)你当前处于哪个分支,创建时就会以当前分支,也称head,复制一个一模一样的分支,连同历史版本也会复制

12.git和history的联系

1)所有git分支的文件的local history版本都是一个,切分支会改变local history版本,提示是External change
2)只要引起当前文件变化的切分支都会在local history记录一个节点,不变的切换不会记录

13.关于idea上的git路线图

1)idea分支路线图上的铅笔图标就是代表当前处于这个版本上的分支
2)绿色代表本地的,紫色代表远程的,黄色代表head;同一个分支的本地和远程为1组,不同的组分开显示
3)超过2个分支都用2个图标代表
4)如果一个分支是从其他分支复制过来的,在路线图上看,复制时间点之前的融合信息都显示的是之前分支的信息,复制时间点之后再融合显示的就是merge …into “当前的分支名称了”
5)路线图你选择一个节点后,右侧会显示修改文件比较的窗口,点开后会显示2个窗口,分别是被选择节点的父节点(左)和被选择节点(右)

开发模式

1)gitlab上先基于上一个版本release创建一个新的版本的release-xxx,发版号xxx和pom里的最好对应。这个是此次要发版的汇总版,要汇总所有开发人员的功能
2)gitlab上先基于刚创建好的release-xxx为模板再创建一个feature-xxx,这个是你自己开发的功能,可能会有其他人很多功能,最后都merge到release-xxx里
3)在idea里刷新,将release和feature都拉取到idea的origin里,然后checkout,idea会自动复制一个local的release和feature
4)在local的feature里开发,测过都没问题了,先本地commit
//后面有两种方式
方式一:
5)每个人开发好后只管将自己的feature push到gitlab上就好了
6)由架构师或项目组长,将所有开发人员的feature拉到本地,然后统一merge到release里,测试,没问题的话 ,本地commit,然后push远程;如果有问题,由架构师统一修改后再push
方式二:
5)每个人开发好后,测试没问题了后,先把feature push到远程,然后再本地merge到release里,再把release push到远程,这时遇到冲突,各自进行解决
6)架构师最后只要拉取已经全部merge好的release到本地,测试,发现谁的问题,谁修改后再重新搞一遍就好了
//
7)最后等都开发好了,每个人都更新下

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值