<!--more-->html
分布式版本控制系统,它是由Linux(全球比较大的服务器系统)创始人花两周使用C语言编写的,(在GIT命令窗口中通常是执行Linux命令)node
什么是版本控制系统?git
可以把以前操做的具体信息记录下来,方便往后的更改。github
- 备份文件
- 记录历史
- 回到过去
- 多端共享
- 团队协做
经常使用的版本控制系统web
- git:分布式版本控制系统
- svn:集中式版本控制系统
面试题:分布式和集中式的区别?面试
[集中式]:
npm
- 想要作历史记录的查看或者备份,必须链接到中央服务器才能够(须要联网)
- 处理速度没有git快
[分布式]:
bash
- 每一个开发者本地都是一个单独的仓库,在本身的仓库中就能够完成历史版本记录和查看(不须要联网)
- git处理的速度更快(git是按照数据存储的)
ls:查看当前目录下的文件(或文件夹)服务器
cd: 目录切换分布式
touch 建立一个空文件
touch .gitignore
vi 向指定文件中插入内容 例如:vi.txt
rm 删除文件
安装完成git后,咱们应该先把基础信息配置一下(本身须要配置一次便可)
$ git config -l 查看当前本机的配置清单 $ git config --global user.name xxx $ git config --global user.email xxx (xxx写github/coding等平台的帐号和邮箱)
Git是分布式版本控制系统,每一台客户端都是一个独立的git仓库(有git工做的全套机制)
一个git仓库分为三个区域;
- 工做区:平时写代码的地方
- 暂存区:写好的一些代码暂时存储的地方
- 历史区:生成一个个版本记录得地方
在指定目录中,打开git bash命令行,执行git init
,至关于以当前目录做为基础,建立了一个本地git仓库建立完成后,会在项目的根目录中展现 .git 这个隐藏文件:有这个.git文件的才叫作git仓库,没有则不能被称为git仓库(由于暂存区和历史区都是存在 .git 文件夹中的)
$ git add xxx 把某个文件提交到暂存区 $ git add . 把全部修改的文件(修改和新增的包含,删除的不包含)提交到暂存区 $ git add -u 把全部修改的文件(包含修改和删除的,不包含新增的) $ git add -A 是点和u的集合体,(全部修改,新增,删除的信息都会提交到暂存区),可是真实效果中二者都差很少,用哪一个均可以 $ git status 查看当前文件的状态 红色:在工做区中,尚未提交到暂存区 绿色:在暂存区中,尚未提交到历史区
- 若是在提交的时候,有些内容不想提交,咱们能够增长git提交的忽略文件:
.gitignore
(没有文件名只有后缀名).gitignore 中的信息:
.idea // 使用WS打开项目或者编辑项目,自动会生成的文件node_modules // 使用npm安装模块的时候,当前安装在项目中的第三方模块都在这个文件夹中(之因此忽略是由于文件太大了)
.DS_Store (mac本中的文件)等等
$ git commit $ git commit -m'注释内容' $ git commit -a -m'注释内容' 把提交到暂存区和提交到历史区合并到一块儿完成。可是只适合已经提交过一次的文件,被修改后能够快速提交。可是对于新增的文件,一次都没有提交过的,是不容许这样操做的。
【root-commit】根提交:
不论是从工做区提交到暂存区,仍是从暂存区提交到历史区,每个区域当前的内容是已知保存下来的不会消失。
$ git log 或 $ git reflog
都是查看历史提交记录的(也至关于查看历史版本号),在没有历史版本回滚的时候,咱们用哪一个均可以。若是有历史版本回滚,
git log
只能查看当前回退版本之前的版本
$ git rm --cached . -r
能够把.
替换为具体的文件名,这条命令的意思是:从暂存区把全部内容(或者是你指定的具体文件)都撤回到工做区(无论暂存区中的内容是否已经提交到历史版本上了,也不论是你第几回放到暂存区的,通通撤回到工做区)
这种方式太暴力,咱们用的不多,不推荐使用
$ git checkout .
这条命令的意思是:
把暂存区内容撤回工做去(覆盖现有工做区中的内容没法找回)。
也能够理解为:用上一个暂存区存储的内容覆盖现有工做区的内容,工做区内容变为和上一个暂存区同样的内容,暂存区内容还在。
存在问题:只能限制当前代码尚未提交的状况,当前代码没提交回滚的是上一次提交到暂存区的内容(和工做区内容不同);若是当前此次也提交了,暂存区和工做区同样,回滚回来也是同样的,这个方式就解决不了了。
解决问题:
- 输入命令
$ git reset HEAD .
: 在暂存区中,回滚到上一次暂存区中记录的内容(暂存区先回滚一次)- 输入命令
$ git checkout .
: 把最新暂存区的内容回滚到工做区,替换工做区中的内容
$ git diff
工做区 VS 暂存区 :git diff
工做区 VS 历史区 :
git diff master
暂存区 VS 历史区 :
git diff --cached
查看不一样区域之间代码的不一样,咱们通常都是基于可视化的页面来查看不同的
最重要的代码回滚技巧:
$ git reset --hard 版本号
git log
能够查看版本号回滚的时候指定的版本号不必定很是全,有七八位便可
当咱们回滚到某一个历史版本以后,暂存区和工做区的内容都将被这个版本内容所代替
$ history > xxx.txt //(把历史操做步骤输出)
- 前面讲的都是单独开发,在本身本地创建git仓库的一系列操做流程,在团队写做开发下,流程仍是有所区别的
- 通常是由团队技术LEADER或者指派人完成的,仓库中默认是有一些初始化文件的
- 中央仓库多是在:gitHub,Coding,本身公司的git仓库服务平台,本身公司的服务器等...
- 基于gitHub建立远程仓库,建立完成后会生成一个远程地址,例如:
https//github.com/username/Repository name.git
做为LEADER,还须要把项目中一些基础的信息提交到远程仓库上:
- 在本身本地建立一个仓库,把一些基础内容都放在仓库中
- 把新增长的内容提交到本地仓库历史区中
- 让本地仓库和远程仓库保持关联
- 把本地仓库历史区中的信息同步(推送)到远程仓库上
- 让本地仓库和远程仓库保持关联:
$ git remote add 名字(通常都叫作origin) 远程仓库地址 $ git remote rm 名字 // 移除关联 $ git remote -v // 查看当前仓库和哪些远程仓库保持关联
让本地历史区信息和远程仓库信息保持同步:
第一种方法:
$ git push origin master // 把本地信息推送到远程仓库上 $ git pull origin master // 把远程的拉取到本地仓库 (origin 是本地和远程仓库关联的那个名字,master 是远程仓库的主分支)第二种方法:(推荐使用)
咱们建立完成后远程仓库后,能够直接经过git clone 仓库地址 仓库别名(能够不写)
的方式把远程仓库克隆到本地:至关于在本地建立了一个仓库
也让本地这个仓库和远程仓库保持了链接(名字:origin)
也把远程仓库现有的内容克隆到了本地
做为开发者天天来的第一件事情或者提交代码以前,都要先pull一下
- 【若是远程仓库和本地仓库不是同一个文件同一行代码冲突】
git 会自动依赖于 Fast-forward 模式进行合并自动合并后,咱们从新提交便可
git add/commit/push
【同一个文件的同一行代码冲突】
找到冲突的文件,留下本身想要的代码无论以前是否commit过,都要从新的commit,而后push便可
- 天天第一件事情,就是建立一个dev分支并切换到这个分支上
- 正常的开发代码,把天天开发的任务都先提交到本身的分支上
提交到远程仓库上:
把本地本身分支DEV中的内容,合并到本地本身的MASTER 分支下把本身本地建立的分支删除(能够不删除,可是有的公司不但愿远程中出现分支,或者避免开发人员的分支冲突,提交以前都要把本身建立的分支删除掉)
- 和第一种只使用MASTER分支同样了,把本地最新合并的MASTER分支代码,提交到远程仓库的MADTER下,(冲突合并便可)
操做分支的基础命令:
$ git branch //查看现有的分支 $ git branch xxx //建立一个新的分支(当切换到某个分支上的时候,会把当前MASTER分支中的新信息同步到这个分支上) $ git checkout xxx //切换到某个分支上 $ git checkout -b xxx //建立一个新的分支而且切换到这个分支上 $ git branch -D xxx //删除某个分支(必定要切换到其余分支上才能够删除当前分支) $ git merge xxx //合并分支内容 $ git log --graph / --oneline //再有分支的状况下,能够更清楚地查看分支的提交和合并内容(了解就好)
首先fork别人的仓库
- 把别人的仓库克隆一份如出一辙的,放到本身的帐号下,变为本身的仓库(咱们平时能够修改本身仓库的源码)
- fork的仓库和别人的原始的仓库会默认创建一些关系,咱们能够把本身仓库中和别人不同的地方,提交给别人,用(pull-request)
把本身fork的仓库,克隆到本地
- 之后本身有一些新的代码心得,能够本身尝试去修改,而后同步到本身fork的仓库中
- 在github中点击 new pull request
GitHub只提供了web站点的发布,后台项目没有提供必要的环境
- 把整个仓库做为一个项目发布(这种模式不经常使用)
master是项目代码,gh-pages分支下存储的是项目预览页面的代码
其余人克隆研究的是master分支下的代码
看介绍页面,看的是gh-pages分支下的代码
- 建立一个仓库
- 把仓库克隆到本地
- 把源码传到master分支上
- 在本地仓库中建立gh-pages分支
- 把介绍页面放在gh-pages分支下
- 把介绍页面的内容上传到github的gh-pages分之下
访问页面:http://用户名.github.io/仓库... (若是页面是index能够忽略不写)
第一步,在github上新建一个仓库,把远程仓库经过
git clone xxx
克隆到本地第二步,把本身写好的做品放在本地仓库中
第三步,经过
git add -A
,git commit -m
,git push origin master
三步操做,把本身的项目同步到远程仓库github中
- 之后修改后,从新执行这三步推送便可
在投简历的时候,把网址
https://用户名.github.io/仓库名
写到简历上就能够访问到页面效果。若是以为地址太长很差记,也能够经过草料二维码 ,来制做本身喜欢的二维码