只有光头才能变强。文本已收录至个人GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3yjava
以前遇到过不少同窗私信问我:「三歪,我立刻要实习了,我要在实习前学些什么作准备啊?」git
三歪在实习以前也一样问过本身当时的部门老大。github
若是再给我一次机会,我会先去花点时间去学学Git。算法
Git我相信你们对它应该不陌生吧?但凡用过GitHub的同窗应该多多少少都会了解一下Gitshell
不知道当时你们学Git的时候是看哪一个教程的,我看的是廖雪峰老师的Git系列的。后端
(别看到廖雪峰就觉得是广告了啊,哈哈哈哈,这篇纯原创分享)数据结构
刚实习的时候,一直都忙着看各类东西。有一天,我学长说:我看你也学了一些基础了,咱们来看看公司的代码吧,看看咱们生产环境是怎么作的。多线程
因而我学长丢了一个Git连接给三歪数据结构和算法
https://github.com/ZhongFuCheng3y/3y.git
那三歪作了什么?三歪去IDEA下把这个Git给Clone下来:maven
我用Clone完了之后,我学长又补了一句:这个项目不是用master分支的哦,你切换一下分支。
三歪:啥?切换分支?咋整?我忘了。
我学长看了下我,貌似不咋会切换分支,就说:“我来吧”。
因而在命令行终端一顿操做后,对三歪说:“好了”
三歪:“我对Git不是很熟悉,以前一直都是在IDEA上操做的。大家通常用命令行多仍是图形界面的多呀?”
我学长:“这没什么,反正工具这东西,学学就行,不是什么大问题。也不必说很仔细去学它,就工具嘛”
三歪:“嗯”
时间飞逝,又过了一段时间...
三歪被分配了一个需求,因而就须要新建分支去作这个需求了。全部的标准应用线上走的是master分支,公司经过一个发布系统来控制发布版本、以及整套上下线的流程。
因而我要先在发布系统里边新建Git分支:
完了之后,我就在IDEA界面上选择那个被我新建完的分支
但发现我死活找不到...因而我就问我学长:我在发布系统里边新建了分支,为何在IDEA上找不到啊?
学长:“怎么会呢,我看看”。
找了一会,他问我:“你fetch 过了吗?”
三歪:“啥?”
因而他拿着个人电脑,打开了终端,又以是命令行的方式敲了一顿,问我:“这是否是你新建的分支?“
三歪点了点头,因而我学长说:”好了,你再看看“。
后来发现,新建完远程分支,若是在IDEA上要能感知到,能够在pull
界面上刷新一下,那就能找到了。
也不是说命令行必定会就比界面牛逼,其实IDEA的Git功能也作得挺好的。如今我都是混合使用,一些操做用命令行,一些操做用IDEA快捷键。
我commit
和push
的时候就喜欢用快捷键。command+k和command +shift+k
我就感受比敲命令要快很多。
这些都是我的习惯的问题,也无对错之分,怎么方便怎么来。
其实也不是全部的系统都会走发布系统的(有标准应用,非标准应用)。若是要本身写一个启动的脚本,通常咱们会作些什么?无非就是用Git
拉最新的代码,而后用maven打个包,而后启动。
若是你看过上一篇《三歪给女友讲解什么是Git》应该能大概了解什么是Git了。
其实我以为学Git主要理解工做区
-> 暂存区
->仓库
这几个概念。
咱们使用Git其实绝大部分的操做都是在本地上完成的,好比说add 和commit
。
只有咱们push
的时候,才会把本地完成好的内容推到远程仓库上
经过上一篇文章咱们知道在每一个人的本地都有完整的历史版本,因此咱们能够在本地就能穿梭到不一样的版本,而后将修改以后的代码再从新提交到远程仓库上。
所谓的工做区实际上就是咱们真正的的本地目录。
咱们在本地添加文件后,须要add
到暂存区,文件一旦被add
到了暂存区,意味着Git能追踪
到这个文件。
当咱们修改到必定程度以后,咱们会执行一次提交commit
,在提交的时候咱们会”备注“本身此次的提交修改了什么内容。
一次commit
在Git就是一个版本,Git是版本控制的软件,咱们能够随意穿梭到任何的版本中,修改代码。
暂存区是这么一个概念呢?
暂存区就像购物车,没到付款的时候你都不肯定购物车里的东西所有都是要的。每拿一件商品就付一次款,那麻烦可大了。
从宏观上看,Git其实有本地和远程的概念,只是本地又分了工做区、暂存区、本地仓库。再次强调:咱们操做几乎都是在本地完成,每一个人的本地都会有全部历史版本信息。
咱们通常会新建分支去支持每一次的修改。
其实分支这个概念也挺好理解的:咱们须要并行开发,同时咱们又不关心对方改的是什么内容,改的是什么文件。所以咱们须要在本身的专属环境下去修改内容,只要把最终修改完后的内容合并到一个主分支就OK了。
假设三歪作完了,通过校验经过后,把本身的代码merge
(合并)到origin/master
分支后,而后就发布上线啦。
随后,鸡蛋也作完了,本身的分支校验完了之后,他此时也想把本身的代码合并到origin/master
。不料,他改的代码跟三歪改的代码有冲突了(Git不知道选择谁的的代码),那鸡蛋只能手动merge
了。
综合来看,咱们使用Git大多数的场景就是各自分支开发,而后各自在本地commit
(提交),最后汇总到master
分支。
因此,咱们学Git大多数就学怎么实现分支的增删改、切换以及版本的穿梭。
学习Git的小tips:Unix/Linux 命令中,
-
后通常跟短命令选项(一般是单字母,也有一些命令是例外的),--
后通常跟长命令选项。若是只有一个单独的--
,后面不紧跟任何选项,则表示命令选项结束,后续的都做为命令的参数而不是选项。例如:
git checkout -- filename
filename
做为git checkout
的参数,而不是选项。
一、若是这个项目的代码咱们在本地尚未,咱们先去GitLab里边找对应的Git地址,而后Clone到本地:
git clone https://github.com/ZhongFuCheng3y/3y.git
二、接到了新的需求,咱们要新建一个分支,而后基于这个分支去开发:
git checkout -b feature/sanwaiAddLog
在开发的时候,咱们确定会有两个操做:
三、无论怎么样,等咱们作到必定程度了,咱们都会提交代码。若是咱们添加了新的文件,咱们须要先add
,而后再commit
git add . git commit -m "try to commit files to GitHub, i am java3y"
四、假设咱们一切顺利,在没人打扰的状况下已经写好了代码了,而后咱们会把本身的分支push
到远程仓库
git push
五、假设咱们写到一半,其余小伙伴已经把他的代码merge
到主分支了,咱们也须要把他最新的 代码给pull
拉取下来(能够 git fetch + git merge 替代)。
git pull
若是没有冲突,那git就会把他的代码给merge
到我当前的分支上。若是有冲突,Git会提醒我去手动解决一下冲突。
六、假设咱们写到一半了,如今工做区的代码都已经commit
了。此时同事说要不帮忙一块儿排查一个问题,同事通常用的是本身分支,因而就得问他:你用的哪一个分支啊?因而得把他的分支给拉下来,看看他的代码哪儿有问题
git fecth -- 手动拉取远程仓库更新的信息 git checkout 分支名 -- 切换到他的分支
如今切换到他的分支,至关于你的环境跟他的环境是如出一辙的,因而就能够愉快地一块儿看Bug了。
七、假设咱们写到一半了,如今工做区的代码还没commit
。如今有同事说要排查问题或者一个新的Bug被发现了,要紧急切换到其余的分支。如今我又不想commit
(我就写了一半,编译还报着错误,没理由让我commit
吧)。
这时,我会把工做区的代码先stash
到暂存区给保存起来,而后就能够愉快地切换其余的分支了。
git stash
等我解决完另外一个bug或者帮别人看完问题了,我再把刚刚保存在暂存区的代码给捞出来,继续干活
git stash pop
八、我一直在修Bug,如今的分支已经被我搞得人摸鬼样了,我很是难受,甚至不知道本身在这个过程当中改了多少东西了。
思路已经彻底被打乱了,我想回到一个稳定的commit
从新出发,重来吧(经过下面的命令,把工做区的代码都改为对应commit的代码了)。
git reset --hard 版本号
那我怎么找到版本号呢?Git也是有日志的:
git log --pretty=oneline
查看Git工做区、暂存区的变动状况(能够知道哪些没有commit、哪些没有被Git追踪):git status
拉取远程最新的变动到本地:git fetch
切换分支:git checkout 分支名
将代码还原到某个版本(包括工做目录):git reset --hard 版本号
查看Git的提交(commit)记录:git log
将代码还原到某个版本后,后悔了,想从新回去,但在提交记录已经找不到了。git reset --hard
把reset 以后的 commit
都给抹杀掉了。找到最近的执行Git命令:git reflog
还原到某个版本了,如今我为了稳健,不想再原来的分支上修改了,再新建一个分支吧(-b
参数把当前分支切换到了要建立的分支上):git checkout -b 分支名
咱们把上一次仍是”相对稳健“的分支合并到我新建的分支上:git merge 分支
忽然想看看如今有多少个分支:git branch -a
新增几个文件了,随手git add
一下吧
改得差很少了,随手git commit -m
一下吧,最好仍是写好备注,否则之后等改多了,你都不知道你改了什么啦。
改完了,提交到远程吧:git push
想把远程分支最新的代码给拉下来,而后合并到本地上。咱们能够用git fetch
和git merge
来实现,也能够经过git pull
来实现。通常我用的都是git fetch
+git merge
,这样会更加可控一些
有的时候,本地分支在master分支,而后忘了切其余的分支去修改,直接在master改了,而后也push到远程了。等你发现的时候,你会真的想骂本身。
咋办?最简单的办法其实咱们仍是能够git reset --hard
到对应的版本,而后将其修改或者复原,再强制提交到master
分支:git push -u origin/master -f
在这篇文章中,我列出的Git经常使用的命令其实并很少吧。
像不少博客讲的diff
、tag
、config
之类的命令我都没有讲,我这边现实开发时这些命令也没怎么用过...
若是以为我说漏的,能够在评论区补充,一块儿学习。
其实如今IDEA
也很强大,不少时候均可以配合IDEA
给咱们提供的Git
去作不少事。有的场景敲命令会比较方便,有的时候就直接图形化界面就比较方便。
就diff
这个功能而言, 确定仍是图形界面好用一些吧(至少我是这样认为的
IDEA配合一些快捷键,使用Git也能爽得飞起。Git始终也只是一个工具,若是你有兴趣能够了解它的实现(我以为大部分人可能不知道它是怎么实现的);
若是没兴趣看它的实现,了解它是怎么使用的,也足够应付平常的开发场景了。
总的来讲,如今的互联网公司大多数仍是用Git的,Git自己使用上其实不难,只要理解了Git是干吗的,它有个本地仓库的概念,它能够来回穿梭各类版本,而后将本地的信息提交到远程,跟着教程把经常使用的命令敲敲也差很少了。
若是实在是不懂,也别慌(我都给大家打了个样了);主动认怂,虚心求教,同事们都不会嫌弃你的。
若是实习以前不知道要准备什么去公司,要是对Git不了解,我以为Git能够有占一席之位。
更多Git命令和参考资料:
下面的文章都有对应的 原创精美PDF,在持续更新中,能够来找我催更~
我是三歪,一个想要变强的男人,感谢你们的点赞收藏和转发,下期见。给三歪点个赞,对三歪真的很是重要!