暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Git相关

在下uptown 2021-06-26
321

闲聊

Kafka系列终于结束了,我个人觉得这个系列更的还阔以,看完去解决一些不深的问题起码是有思路的。后续会整理成专栏。

这几天真的没太有时间去更文章,或者不太想去更,刚从上个迭代任务出来又被一脚揣进下一个迭代任务,赶得不可谓不让人心烦,而且分享需要持续燃烧热情,保持学习。不然自己都没玩明白就来水文章总归是不好滴。

心态也属实不稳定,对学习失去了动力,成天胡思乱想。前几天出去散心显然没有起到作用,看来出去可能没啥作用,关键得是跟谁出去。。。

这次分享一下工作中最常用的git工具跟常用命令,说起来出来搬砖一年多了,刚进公司的时候git只会在IDE上操作,平时也只是pull一下、push一下。

每次写完需求提交代码都很费劲,因为每个项目里都有一个git子模块的概念,很容易就提交的不对,然后就被测试就疯狂支配.

什么是git

分布式版本控制系统,其实这里的分布式我也没整明白为啥叫分布式,明明就自己一个单机git,我理解可能是因为git中有本地仓库
远程仓库
(这个后面说一下)

那什么是版本控制系统呢,这个就很强了,遥想当年改论文的时候,为了过查重,一段话得用好几种方式写出来保存,想删除某一段又怕之后找不到,于是把论文另存为各个版本。重命名为论文1、论文2、论文3、论文4。。。。

而git就是为了解决这种情况,把之前的提交记录在一个分支
的概念上,类似这种

分支就像是一颗树,每一次提交成为一次commit,commit可以认为树上的树枝。

基础概念

工作区
:其实就是真·工作区,就是电脑中的某个目录,比如你的论文存到磁盘的目录。

本地仓库
:当使用了git后会默认生一个隐藏的.git文件夹,这里保存了每次的提交文件,可以理解成需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

远程仓库
:git不仅能方便记录文件的修改,还能保证文件安全,比如经常看到写着一个很重要的文件但是电脑突然死机了,要换硬盘,那不滑天下之大稽了,而如果用git的话,将本地的版本库push到远程仓库后,只要你有远程仓库的账户,随时随地都能git clone下来继续操作。一般大家常用的远程仓库有

  • https://gitee.com/
  • https://github.com/

github是国外网站会比较慢一点。

常用命令

不说太多概念,反正都会忘,多操作一下就记住了,简单得一些命令也不说了,说一下比较实用的命令

git logs

git logs用来查看git的提交记录,可以检查当前分支下的所有提交。

git merge

一般开发主线功能都会基于当前版本去拉出一个新的分支,开发测试结束回归代码的时候会用git merge回到主分支上。

git cherry-pick

这个简直太好用了,因为有时候如果这个功能想合并到多个版本,版本跟版本之间跨度又很大,直接git merge的话代码可能就合乱了。

所以git可以只挑选对应的commit,然后用cherry-pick的方式合并单独的一次提交。

git submodule

子模块的功能应用好的话也是非常方便的,比如整个应用分为了A、B、C三个服务,这三个服务共同依赖了一些相同代码,比如一些数据库交互层的代码可以抽象出来成为一个子模块,这样数据库有变动只需要改一下子模块,然后将ABC的引用指向最新的模块即可。

子模块对于父模块用起来相当于一个文件,整个子模块发生变动父模块都认为是发生了变化要提交。不过这里有个坑点。

一般父模块都会git submodule update,当时带我的师傅也是这么教的,我认为是不对的,因为update完了只会他会向前拉一个新的游离分支,如果继续在游离分支上写的话父子模块关联就会有问题。所以我现在直接都是进到子模块里面手动checkout到对应分支。

git rebase

有时候拉出新分支去开发的时候往往每次commit填写提交内容的时候都放飞自我,因为开发周期如果很长的话怎么也得有个几十次commit,其中可能就会因为匆忙commit一些不当言论。

当git merge回主分支的时候新分支的每一次commit都会被合回到主分支,也就是看主分支的log就会看到你之前的一些不当言论。

所以我们可以在开发结束后新分支上用git rebase -i 把多个commit合成一个commit,然后cherry-pick到新分支上。这样就不会有一些不好的言论暴露了。。

好了,下周见,算了别下周了,下次见~


文章转载自在下uptown,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论