对于刚参加工作,或者刚从svn切换到git的同学来说,刚开始接触git的使用其实算是一件比较头疼的事情,所以以下将从几个常用的场景入手,来快速帮大家熟悉和使用git
需要准备的工具
- git官方下载链接 https://git-scm.com/download/win
- git小乌龟下载链接 https://tortoisegit.org/download/
这两个工具安装都很简单,一路next即可,安装成功后右键文件夹内的空白处,将有git和小乌龟的菜单,从原则上来说只用git客户端也是可以的,但是实际情况加上小乌龟,两者结合使用更佳,毕竟有些操作在图形化界面上要更方便一些,比如文件对比和log查看
场景一:从代码仓库clone代码
这是git使用最开始的源头了,这一步也是比较简单的,只是从远程仓库把代码拉取到本地,并使用git管理,对应的命令是 git clone 相对于svn来说就是svn的check out而已
通常来说一般会在内网的github上,点击code会出来一个弹出,里面的链接即为代码仓的clone地址
在本地新建文件夹,进入文件夹右键后打开git bash
输入git clone github的url 即可完成代码仓库的clone
安装小乌龟后将会以类似svn不同的小图标清晰的显示出来是否有文件被改动过,如果下载代码没有状态图标,可能是因为刚安装小乌龟还没有重启过电脑,重启一次即可。
场景二:分支创建
很多小伙伴拉取代码以后就开始迫不及待的修改代码,但其实如果不创建自己的分支的话很有可能提交是无法push的,默认clone的一般都是项目的master分支,通常master分支也被用来作为生产环境的分支,正式出包会使用master,所以为了避免master被污染,这个分支的权限管控也是极为严格的,默认不接受push推送。
在代码目录下打开git bash,括号内显示的就是当前的分支,可以看到直接clone后默认为master分支
既然master不许大家随便推送,对应的一般的公司都会有一个dev分支来作为开发分支给大家使用,当然也不一定叫dev分支,这个看实际情况。我们只需要从指定的开发分支创建本地的分支即可。
分支创建这里推荐使用小乌龟,简单直观。
在代码仓库右键选择switch/checkout,从名字其实可以看出来这个命令既可以创建分支也可以切换分支,我们用它来创建一个自己的本地分支
点击后弹出的对话框,在分支浏览的按钮下我们可以选择以哪一个分支为基础来创建一个本地分支。这里注意,通常情况下拉取分支一般来说是基于远端的,在remotes/origin下而不是以你本地的分支为基础,我这里假装v3.0是我要用的开发分支,那选取该分支进行拉取
选取分支后,默认的创建会打上勾,然后后面填你分支名,你拉了一个分支也要起个名字的,这里推荐格式 原分支名_你自己的工号或名字_加用途描述 来作为新的分支名称,这样当你本地分支很多的情况下,你自己不至于弄混,否则当你本地分支多了以后你可能不知道哪个是基于哪个分支拉取的,当然也能查到,但是很不直观,这里推荐一个最佳实践,有的公司的ci可能对分支名有特殊规范要求,按要求来即可。
点击ok后新的分支就会被创建,并默认切换到新的分支。
场景三:提交代码
把大象关进冰箱需要三部,git提交其实差不多,大概也分为三步骤,1.加入暂存区,2.comit,3。push到远端。
小乌龟的提交其实内部帮我们做了加入暂存区的操作,所以通过小乌龟我们只需要提交加push就能将代码推送到对应远端。
这里随便修改一下,邮件空白处点击小乌龟的提交
点击提交即可将本次改动提交到 本地仓库
commit只负责把代码提交到你本地的仓库里面,也就是说,现在这个改动还在你的电脑上,别人其实都还是看不到的,要让其他人看见需要将你的代码push到远端分支才行。
push 这个操作第一次推荐使用git bash
我们先来push一下试试看,果然没有成功,是因为git push默认是向远端同名的分支进行推送,我们最开始只是在本地建了一个本地分支,从来没有在远端,实际上也就是github那台服务器上创建分支吧,所以直接推送他会提示你一个命令,用这个命令就能在push前先帮你去远端服务器创建同名分支在将本次改动push进去,以后这个分支就可以直接使用git push了。
我们拷贝这个在执行一次,这一次你应该成功了,成功后在github上立马可以看到你创建的远端分支
而且已经识别到了你的改动,提示你是否要提pull request来推送这个改动
提pr是用来做什么的呢,继续看图
本地分支是我们最开始依据dev分支创建的,比如a同学创建了dev_a_bugfix的本地分支,此时这个分支只在你电脑上有,我们commit代码也只是提交到了本地的分支里,接着我们用git push在远端创建了同名的远端分支,并将本地的改动也同步过去到远端。这个时候其实可以看出来,你的改动还是只到了远端你的同名分支,并没有真正合入dev分支内,大家都是基于dev分支开发的,相当于你的改动对其他同时来说此时仍然不可见,怎么将你远端分支的改动真正同步到dev远端呢,就是提pull request
点击后创建pr后,确认要合入的目标分支是不是正确的,之前我们假定这个项目用的开发分支是v3.0,那此时确认ok,会比较两个分支的差异显示在下方,右边可以选reviewer。一般公司流程都要指定对于的commit由他来批准你的pr请求,他批准后你的代码才会被合入dev分支
那么总结一下
将代码提交到本地仓库是commit操作完成的
将本地代码推送到同名远端是git push命令完成的
远端与远端之间的代码合并是通过提交pr请求完成的
记住以上三点,就不会弄混代码提交的逻辑。
场景四:更新代码
这一步就比较简单了
a同学他的代码已经通过pr提交到了dev分支,如果你也需要这部分改动,类似与svn的update操作,用来让你的本地分支与开发分支保持一致,那使用git pull origin dev即可将远端dev的改动拉取下来并自动megrge到你本地。
需要注意的是 git pull 如果不指定从哪个分支拉取的话,默认也是从你同名的远端分支拉取,远端分支又是你自己push上去的一般也只有你自己用,所以其实通常来讲你不会从你同名远端去pull,更多的是我们从大家公用的dev分支去拉取别人的代码,此时要指定远端的分支名,如origin dev 指明是从远端的dev分支拉取即可。
git pull 有的时候因为你本地存在改动有可能会被拒绝,此时只需要将你本地改动放在暂存区,或者已经完成的commit掉,或者压根不需要的就回退了,保证你的代码是没有改动的再次操作即可,如果有冲突和svn拉取时冲突一样解决就行。
以上就是git最基本的几个场景的使用,其它操作见下一篇博客