当前位置:首页 > 科技  > 软件

Goland使用Git的这个几个高级技巧,效率提升10倍

来源: 责编: 时间:2023-12-01 17:12:41 141观看
导读简介Git作为一个版本控制(version control)的工具,已经有近20年的历史。2005年的时候,Linux Torvalds和其他linux开发者在使用另一款版本控制工具BitKepper,但是这款软件是收费的,其中一个开发者逆向破解了BitKeeper,与BitKe

简介

0Ui28资讯网——每日最新资讯28at.com

Git作为一个版本控制(version control)的工具,已经有近20年的历史。2005年的时候,Linux Torvalds和其他linux开发者在使用另一款版本控制工具BitKepper,但是这款软件是收费的,其中一个开发者逆向破解了BitKeeper,与BitKeeper公司发生了利益冲突,导致他们不能再使用BitKeeper。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

于是Linux Torvalds很快开始开发Git。很快很多的志愿者加入了Git的开发,正式由于Git的出现,后面才出现了诸如Github这样的开源社区。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

如今,Github和Gitlab是企业中使用最多的项目管理工具。它们的共同点都是基于Git。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

Git工具虽然强大,但是只有你对它有更多的使用和了解,才会真正感知到它的强大之处。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

为了能够更好的理解和使用Git,我们通过下面的故事来感受。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

在一个很普通的早上,A同学骑着单车,准备去公司上班。A同学是一名女生,职业是go开发者。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

9点左右的时候,A同学到了公司,稍微休息了几分钟,就开始投入到今天的工作。今天她要开发一个新的项目,所以她第一件事情就是拉取这个新项目到自己的goland里面。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

下面是她得到的git地址0Ui28资讯网——每日最新资讯28at.com

https://github.com/xxd/go-git.git

然后她到goland,点击File->New->Project from version control->Git,然后把这个地址复制到如下输入框0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

图片图片0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

在Directory 后面输入项目要保存的位置,点击Clone。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

如果你觉得需要点很多次,才会出现 Clone 的窗口,你可以在goland的 keymap 里面搜索 Clone ,选择 Repository 里面的Clone,然后给他一个快捷键,比如 alt+g0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

很快项目就拉了下来。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

A同学接着以Debug方式启动了项目。发现项目运行正常。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

然后她准备开发用户管理模块的功能,比如注册用户,查询用户,禁用用户。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

于是A同学按住 alt+n 创建了一个 user 包,接着再按 alt+n ,在user包里面创建了 user.go 文件,在A同学输入完user之后,goland会提示她是否把这个文件加入到这个项目的 Git 仓库,选择Add ,当然要把自己写的文件加入到项目的 Git 仓库,因为后面我们要提交这个文件到项目的远程仓库。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

此时,我们已经见到了Git的3个概念。0Ui28资讯网——每日最新资讯28at.com

第一个是远程仓库(Repository),也就是项目代码在Github上被管理的地方。0Ui28资讯网——每日最新资讯28at.com

第二个是工作区(working dir),就是我们本地存放代码的位置。在Github上的Repository和我们本地的项目代码位置形成了一对remote和local的关系。我们一般把Github上的仓库叫做远程仓库,本地的就叫做本地仓库。0Ui28资讯网——每日最新资讯28at.com

第三个就是分支(branch),我们默认拉的是master分支。对于分支的名字,最出名的除了master(主分支),develop(开发分支),release(发布分支),staging(预发布分支)。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

分支是Git的主角,后面的很多操作都会出现他的身影。我们也可以新增自定义的分支,比如feature-2023-11-11 表示2023-11-11要发布的特性的开发分支。有时候在分支上也会带上自己的名字,比如feature-swk表示是孙悟空的开发分支。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

目前对于Github来说,默认的分支已经是main,而不是之前的master0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

由此,我们知道一个Repository可以有多个分支,那么同时对于本地来说,也可以有多个对应的分支,区别是一个是remote的,一个是local的。0Ui28资讯网——每日最新资讯28at.com

刚才A同学点击Add的操作,实际上对应了如下Git命令0Ui28资讯网——每日最新资讯28at.com

git add user.go

add的文件和没有add的文件goland是给了不同的颜色来区分的。就像是被add的文件在城墙里面,没有被add的文件在城墙外面是完全不同的世界了。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

上面只是一个可以被看到的区别,那么本质是什么呢?0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

这里就需要上一张表达本质的图0Ui28资讯网——每日最新资讯28at.com

图片图片0Ui28资讯网——每日最新资讯28at.com

上面的图说明了 git add 命令的本质效果是工作区的文件被放入到了staging area,可以理解为一个预备的文件区域。就比如你去商场买东西,会拿一个购物车,把自己喜欢的商品先放入到购物车的过程。0Ui28资讯网——每日最新资讯28at.com

git add 也被解释为 staging the changes。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

既然是购物车,到了后面我们也可以将购物车的某个商品拿出去,然后到收银台进行支付。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

大概过了一个小时,A同学把用户注册的功能基本上写好了,于是她开始自己用postman测试下自己的代码,过了一会,她发现没有问题,于是她开始按ctrl+k(k音同commit的c的发音)0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

图片图片0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

在这个窗口,Default Changelist 列出了你已经 git add之后的文件,哪些是被修改过的,当然第一次 git add的文件都是修改过的。0Ui28资讯网——每日最新资讯28at.com

然后是填写提交信息的 Commit Message 框,比如这里A同学写的是注册用户,注意 Commit Message 是commit之前必须要填的,不填的不让commit。0Ui28资讯网——每日最新资讯28at.com

如前图,commit的内容就是我们之前staging area里面的内容0Ui28资讯网——每日最新资讯28at.com

我们一般是直接点击Commit右边的倒立三角形,选择Commit and Push。然后就会弹出一个push框,最后点击push,你写的代码就会在Github上对应的分支看到了。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

如果你是点击的commit,后面push的时候也可以按ctrl+shift+k来push代码。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

commit 和 push的区别:commit 是把变更放到本地的repository,push 是把前面commit的变更全部放到remote的Repository0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

到此,一个企业里面的提交代码的git过程就结束了。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

实际上,随着业务的发展,我们会不断的重复上面这个基本的过程,也就形成了一次次的提交历史。我们可以到如下图的地方查看提交历史0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

图片图片0Ui28资讯网——每日最新资讯28at.com

如上图,goland提供了Log列,让我们查看提交历史,同时可以看到branch,user,date 3个下拉框来过滤我们想要看的历史记录。0Ui28资讯网——每日最新资讯28at.com

当我们点击某一次提交,右边会出现这次提交的文件,同时我们选中一个文件,按ctrl+d可以对比2次提交的这个文件的差异。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

如何快速丢弃本地的改变(在staging之前)

0Ui28资讯网——每日最新资讯28at.com

注意:Git是基于改变的而不是基于文件来staging的。0Ui28资讯网——每日最新资讯28at.com

比如A同学刚才已经提交了user.go文件,第二天,她又改了这个文件1个小时,发现需求变了(需要从开始的地方写),但是自己在user.go里面已经写了很多的代码,虽然可以按ctrl+z回退,但是想到需要按很多次ctrl+z就很麻烦。0Ui28资讯网——每日最新资讯28at.com

package usertype User struct{  Name string  Age int  //下面是很多新加的代码  //new  //旧的代码  //old  //新的代码+旧的代码  //new+old}

这类情况可以使用如下命令0Ui28资讯网——每日最新资讯28at.com

git checkout user.go

执行这个命令,可以让user.go回到Repository的状态,也就是上次提交后的状态。这样就不需要重复按ctrl+z(按多了,自己也不知道该到什么时候的代码了)0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

恢复已经staging的改变

0Ui28资讯网——每日最新资讯28at.com

可以使用reset命令0Ui28资讯网——每日最新资讯28at.com

git reset HEAD user.go

0Ui28资讯网——每日最新资讯28at.com

这样会清除刚才staged的改变(基于改变而不是文件),但是工作区的代码仍然是不变的0Ui28资讯网——每日最新资讯28at.com

package usertype User struct{  //新加的注释  Name string  Age int}

0Ui28资讯网——每日最新资讯28at.com

要让工作区的代码回到如下0Ui28资讯网——每日最新资讯28at.com

package usertype User struct{   Name string  Age int}

0Ui28资讯网——每日最新资讯28at.com

还需要执行如下命令0Ui28资讯网——每日最新资讯28at.com

git chekout user.go

0Ui28资讯网——每日最新资讯28at.com

如何快速取消某一次commit

0Ui28资讯网——每日最新资讯28at.com

有时候,你commit 才发现这次提交时有问题的,你想取消这次提交的变更。0Ui28资讯网——每日最新资讯28at.com

使用如下命令0Ui28资讯网——每日最新资讯28at.com

git revert HEAD

0Ui28资讯网——每日最新资讯28at.com

HEAD 表示是最新一次提交,如果你想取消更久之前的commit,可以带上每次提交的hash值0Ui28资讯网——每日最新资讯28at.com

git revert  47944b4b9273d756e382c20e259bbdbedd1a6d98

0Ui28资讯网——每日最新资讯28at.com

如何查看每次commit的hash值呢?0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

图片图片0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

在Log里面,选中某次commit,然后右击,点击 Copy revision number0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

注意:上面的git revert只是取消commit,在git log里面取消的commit仍然是存在的,并没有被删除0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

如何删除一次commit

0Ui28资讯网——每日最新资讯28at.com

当我们发现某次提交是错误的,我们想删除这次提交(在提交历史里面看不到这个提交),使用如下命令0Ui28资讯网——每日最新资讯28at.com

git reset --hard  47944b4b9273d756e382c20e259bbdbedd1a6d98

0Ui28资讯网——每日最新资讯28at.com

这个命令会做3个事情:0Ui28资讯网——每日最新资讯28at.com

把HEAD(最新的一次提交)设置为指定的那次提交,比如目前提交了3次,分别为A->B->C,执行 git reset B,就会把HEAD从C变为B0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

  • 把staging area 设置到指定的那次提交的staging area 的时候

0Ui28资讯网——每日最新资讯28at.com

  • --hard则表示会把工作区的代码设置到指定的那次提交的代码

0Ui28资讯网——每日最新资讯28at.com

在goland里面,可以通过选中某一次提交,右击选择 Reset Current branch to here。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

注意:对本地的分支进行 git reset 是没有风险的,因为即使操作错了,仍然可以使用 git checkout 回到最新的代码。0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

什么时候用rebase,什么时候用merge

0Ui28资讯网——每日最新资讯28at.com

简单来说,当你需要把remote的Repository的更改应用到本地的分支,使用rebase;但是如果你的本地分支是和别人共享的,那么不要使用rebase,因为rebase会重写commit的历史。0Ui28资讯网——每日最新资讯28at.com

merge 示意图

图片图片0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

现在A同学和B同学在同时开发这个项目,在第一个白色圆圈到第二个白色圆圈这个阶段你们都是使用main分支开发的;这时候A同学需要开发一个feature,因此从第二2圆圈开始checkout出一个分支叫feature;B同学仍然在main分支7开发。0Ui28资讯网——每日最新资讯28at.com

过了几天,A同学提交了3次代码(3个绿色圆圈),B同学提交了2次代码(2个蓝色圆圈)。0Ui28资讯网——每日最新资讯28at.com

这时候A同学需要使用到B同学开发的内容,A同学使用merge,会产生一个新的commit(第四个绿色圆圈)0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

rebase示意图

图片图片0Ui28资讯网——每日最新资讯28at.com

如果A同学使用rebase,那么会把自己的提交放在B同学之前2次提交的前面。但是不会产生新的commit(commit个数和rebase之前是一样的)。这样当我们查看历史记录的时候提交节点之间的关系更加线性。0Ui28资讯网——每日最新资讯28at.com

在goland如何合并代码呢?0Ui28资讯网——每日最新资讯28at.com

图片图片0Ui28资讯网——每日最新资讯28at.com

图片图片0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

第一步:点击右下角当前的分支0Ui28资讯网——每日最新资讯28at.com

第二步:选择其中一个远程的分支0Ui28资讯网——每日最新资讯28at.com

第三步:点击 Merge into Current0Ui28资讯网——每日最新资讯28at.com

结果:会把选择的分支的更改合并到当前分支0Ui28资讯网——每日最新资讯28at.com

Rebase Current onto selected:会把当前分支的更改合并到选择的分支0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

A into B 表示B会有新的变化 ;A onto B 表示A会有新的变化0Ui28资讯网——每日最新资讯28at.com

0Ui28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35852-0.htmlGoland使用Git的这个几个高级技巧,效率提升10倍

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 系统调用:计算机中的“服务员”

下一篇: 信息系统大模型助手小分队-基于好采项目推进大模型应用在之家的快速落地

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 影音体验是真的强 简单聊聊iQOO Pad

    影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 微博大门常打开,迎接海外画师漂洋东渡

    微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • “买真退假” 这种“羊毛”不能薅

    “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top