Git简介
Git诞生
集中式管理收费,分布式管理BitKeeper收费,后来由于有人破解,BitKeeper对Linux平台收回使用权,Linus用两个星期用C开发了分布式版本管理系统Git。
集中式和分布式
集中式SVN、CVS必须联网,如果使用需先从中心服务端更新数据,编写代码之后还要上传回中心服务
分布式无需中心服务
windows安装
msysgit是Windows版的Git,从https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像),然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装后需要配置
$ git config --global user.name "yourname"
$ git config --global user.email "email@email.com"
让git管理某一个文件夹
初始化,把这个目录变成git可管理的目录
$ git init
其中的.git是git用来管理版本库的,默认是隐藏文件
版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
把文件放入git
$ git add "文件名"
$ git add -A//添加所有改动
$ git add *//添加新建文件和修改,不包含删除
$ git add .//添加新建文件和修改,不包含删除
$ git add -u//添加修改和删除,但是不包括新建
提交
$ git commit -m ""
在commit之前撤销add文件
$ git reset //撤销提交单独文件
$ git reset//撤销所有
-m后面是用来说明这次文件修改了什么
每次修改都要git add -A,然后再git commit把修改的内容提交,add是把内容存在暂存区,
$ git status用来查看仓库的状态
no changes added to commit (use "git add" and/or "git commit -a")
上一句表示有文件修改,但是没有提交
$ git diff用来查看修改了什么东西,也就是之前$ git commit -m输入的内容
版本回退
$ git log用来查询之前的信息记录,单行显示用$ git log --pretty=oneline,显示方式是从近到远,HEAD表示是当前的版本,前面的数字是commit id
$ git reset --hard 3628164回退到某一个版本
$ git reflog可以查看之前做过的操作,可以再回退错误的情况下返回
暂存区和工作区
git 默认会为我们创建一个默认分值master,以及指向master的指针head
.git是git的版本库,其中最重要的是stage(暂存区)
add指令相当于将文件提交到暂存区(stage),commit是把文件提交到分支
撤销修改
git checkout -- file如果工作区修改内容没有提交到stage,直接恢复到没修改之前的,如果没有提交到分支,那就回到上一次缓存区内容
删除操作
git rm file从版本库中删除某个文件
创建SSH KEY
Github需要通过公钥来识别是否是你提交的
$ ssh-keygen -t -rsa -C "邮箱地址"
登录github在设置中找到SSH and GPG Key 把SSH中title随意些,下面粘贴上user目录下的.ssh下的id_rsa.pub的内容
添加远程库
(这种方法是现有的本地库,后有远程库)
在github中create a new repo 按钮,创建一个远程库
$ git remote add origin git@github.com:“自己的地址”把本地页面与远程库关联;
$ git push -u origin master第一次,远程库中没有数据,需要使用该指令将本地版本库中内容push到远程库
以后只要本地做了修改,使用add、commit 然后使用$ git push origin master即可同步到远程库
从远程库克隆
(这种办法是现有远程库,然后克隆到本地)
首先先创建一个远成仓库,在github上创建
git clone git@github.com:brightestcandle.git用来clone一个远程仓库到brightestcandle文件夹下,会在打开gitbanch目录下创建
把文件放到该目录下之后,addcommit -m “” git push即可
*此处需要注意的是,git支持https协议,使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。