引言
Git号称是世界上最先进的分布式版本控制系统,没错玩熟了它你就离高端大气上档次又近了一步。前段时间看实习招聘信息,有些公司都不用去当地办公,只要会Git可以远程完成任务,当时就觉得Git一定要好好学一学,虽然之前弄博客看了一些Git的内容,但当时是单纯的跟着教程去敲的,很多地方都没真正掌握。好记性不如烂键盘,这篇博客是对Git用法的精简,涉及到的都是硬核,便于自己忘了回头查阅,也希望可以帮到其他的初学者。详细的Git手册可以参考Git-Book,这个网站各种语言都有。
Git初识与安装
要它干嘛:
简单地说Git的诞生与一众事物一样,为了进一步解放你的双手。Git让你和队友配合更方便,提供给你们一个协作编辑的平台,并且把你们每次的动作(也可认为是新的版本)信息记录,便于日后分析和版本回退。
怎么获取:
Git对Linux、Mac和Windows都支持,具体步骤就不详述了,因为本人人穷没用过Mac,而且又境界不高,Linux用的不太六。网上安装教程还是很详细的,Windows用户直接去Git官网下载安装。Git官网下载页面。
Git里的行话
分布式:
学习任何东西,都得先把这个邻域频繁出场且刺眼的“语料”理解透彻,这决定了你是否可以愉快无痛的把玩它。说到Git就想到了分布式版本控制系统,一分为二,版本控制系统前文已经解释了,那分布式好像字面就能理解,但与版本控制系统连起来读意思又不明确了。与集中式对比理解,集中式是一台中央服务器存了一切版本信息,你和队友电脑里啥也没,因为你们没权限,想用要么局域网要么互联网,与主机建立连接后才能修改,改完后主机又把相关信息存起来了。而分布式就不同了,此时你和队友的电脑都是“中央服务器”,因为你们电脑里都存储着全部的版本信息。你们各自的修改信息可以两两互换,也可以几个人借助一个服务器愉快的交流。再也不怕一台机子熄火全员收工了呢。
仓库:
仓库就是一个目录,目录里的文件动态被Git记录跟踪。一个仓库需要创建和初始化。
1 | $ mkdir git_breeze //创建目录 |
仓库搞定了,自然要学会往里面放东西、取东西。放东西时可以一次性放一批,逐个文件通过git add 文件名
添加。最后通过一条命令git commit -m "写一句概括本次修改的话"
完成入库。
暂存区
在了解暂存区之前,先要知道Git里的工作区。工作区就是你存放在本地硬盘里的Git文件夹信息。当你把工作区的文件修改后,要传到版本库里。在上文仓库中提到了入库两步骤,首先git add
此时可以理解为把文件从工作区传到了暂存区。而git commit
是把文件从暂存区传到版本库里的分枝master中。
分枝
暂存区中说到,master用来接收暂存区的版本信息。master就是一条分支,这条支线上包含完整的版本历史信息,每个版本就是一个节点。HEAD
带表当前版本指向master。在多人协作中为了在不影响他人下又能自己灵活支配Git库存储,一般要自己创建一条像master的分支。待自己的任务完成后再与master分支合并。有时当多个人对同一内容分别更改并同时提交时会有冲突,用$ git status
查看冲突位置并做更改。
1 | $ git checkout -b newbra //创建并切换到新分支newbra |
标签
简单的理解就是给一个版本起一个容易念容易写的名字,以后调的话方便一点。
1 | $ git tag breeze1.0 //在当前分支最新提交的commit打一个标签 |
Git里的雷区
Github与Git
Git、Github一个比一个出名,出名到一部分未入深坑的用户都不知道谁是谁什么关系。Git是分布式版本控制系统。顾名思义一个仓库可以分布到不同主机。但是宗旨是多人协作下多版本管理,为了协作方便自然要有一个大家随时都能存取查改的平台,Github应用而生,为用户提供Git仓库托管,让本地与远程同步。二者的传输通过SSH加密传输。所以要获取SSH Key才能愉快玩耍,获取方法如下。
1 | $ ssh-keygen -t rsa -C "你的邮箱" |
获取后用户目录下会有.ssh
文件夹放了两个密匙一个私匙和一个公匙,私匙要保管好。最后到你Github设置里把密匙输入就OK了。
推送本地仓库到远程Github非常简单。首先你得有一个向前文那样已经$ Git init
初始化好的本地仓库。接着在Github里创建一个同名repository。接着网页就提示你怎么做,你只需在本地仓库下的Git Bash里输入网页提示的第二种方法如下。到此你的本地仓库就上传到了你的Github账户里了
1 | $ git remote add origin https://github.com/你的Github账户名/你的仓库名 |
接着逆向思维一下,上面是本地Git上传到远程Github,那么怎么把远程Github克隆到本地Git库里呢。一句搞定。
1 | $ git clone https://github.com/你的Github账户名/你的仓库名 |
Git里的套路
版本信息查改:
1 | $ git status //实时查看仓库状态 |
以上是常用的查看版本信息的命令,Git的过人之处并不是记录版本信息,而是帮你一次次在各版本间跳跃转换,你可以跳跃回上个版本或任意版本,或是后悔了在撤销此次转换再恢复过来,get reset
就是干这个活的,具体的参数如下。
1 | $ git reset --hard HEAD^ //^数量表示当前版本的前几个,数较大时HEAD~50 |
上面是版本之间的跳转,当你只提交到暂存区时想回退怎么办呢,又或是刚在工作区修改完想回退怎么办呢?
1 | $ git checkout -- 文档名 //工作区修改撤销 |
文件的删除通常使用$git rm 文件名
只有执行了这句才把文件从git版本库里真正删除,直接在目录下(工作区)删除后,版本库里还存在被删除文件的信息。
分支运用
- bug修复时,用
$ git stash
把当前进度存储,再运用分支的便利性创建bug分支进行更改。修改完毕后再用$ git stash pop
恢复刚才的进度。 - 把本地写好的分支推送到远程时用命令
$ git push 远程库名 本地要推的分支名
- 常规clone远程库到本地后,只有master分支,想要在其他分支工作需要
$ git checkout -b 目标分支名本地 origin/目标分支名远程
以此来和远程库分支对应。创建以后还要$ git branch --set-upstream 本地分支名 origin/远程分支名
$ git pull
从远程抓取分支提交信息,用于本地分支推送失败时排查冲突。