基本概念
Git基于本地进行完整的版本管理,不强依赖远程仓库。(即:所有开发者在本地就可以做版本管理,本地和远程版本管理再相联接。)这是Git和Svn最本质的区别,也是Git的最强项。SVN是集中式的。SVN适用场景:版本变更、切换不频繁,测试人员产品经理也使用。GIT:功能强大,但操作稍复杂。

我们先来理解下Git 工作区、暂存区和版本库概念

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
GIT分支管理命令(以下分支操作都是本地操作):创建分支:git branch (branchname) 删除分支:git branch -d (branchname) git push origin -d  (branchname)  :删除远程分支合并分支:git merge (branchname): 将任何分支合并到当前分支中。example: git merge newtest 如果当前分支是主分支master,命令执行后将合并newtest分支到master分支。合并冲突:1、修改冲突的文件2、用 git add 要告诉 Git 文件冲突已经解决切换分支:创建新分支并立即切换到该分支下,从而在该分支中操作。git checkout (branchname) git checkout -b (branchname)  :当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。列出分支:git branch: 列出本地的分支git branch -a: 列出本地仓库所有分支git branch -r : 查看远程仓库所有分支GIT创建仓库:Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。完全是本地化的。git init :当前目录作为Git仓库。缺省情况下 Git 就会为你创建"master"分支。git init newrepo :指定目录作为Git仓库GIT拷贝仓库:使用 git clone 拷贝一个 Git 仓库(仓库所有分支)到本地,让自己能够查看该项目,或者进行修改。git clone <repo> :从现有 Git 仓库中拷贝项目git clone <repo> <directory> :克隆到指定的目录git clone 时,可以所用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码。各种写法如下:git clone git@github.com:fsliurujie/test.git         --SSH协议git clone git://github.com/fsliurujie/test.git          --GIT协议git clone https://github.com/fsliurujie/test.git      --HTTPS协议GIT提交&获取:git add & git commit :当目录下有文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交。git add 命令将内容写入缓存区, git commit 将缓存区内容添加到仓库中。git commit -a :如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。git status -s :查看在你上次提交之后是否有修改。 -s 参数,以获得简短的结果输出。git reset head :取消已缓存的内容。git diff:查看工作区与暂存区的不同。git commit、git push、git pull、 git fetch、git merge 的含义与区别*          git commit:是将本地修改过的文件提交到本地库中;*          git push:是将本地库中的最新信息发送给远程库;*          git pull:是从远程获取最新版本到本地,并自动merge;*          git fetch:是从远程获取最新版本到本地,不会自动merge; // fetch并不建立本地分支*          git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;git pull // 相当于 git fetch + git merge。Git 有两个命令用来提取远程仓库的更新。git fetch + git merge。GIT查看提交历史:git log :想回顾下提交历史,我们可以使用 git log 命令查看。git log —oneline :查看历史记录的简洁的版本。git log --oneline --graph :开启了拓扑图选项,看到何时工作分叉、又何时归并。GIT远程仓库(Github):Git 并不像 SVN 那样有个中心服务器。目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。git remote add [shortname] [url] :添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:github的SSH配置如下:一 、设置Git的user name和email:$ git config --global user.name "xuhaiyan"  — 查看命令:git config user.name$ git config --global user.email "haiyan.xu.vip@gmail.com"  — 查看命令:git config user.email二、生成SSH密钥过程:
1.查看是否已经有了ssh密钥:cd ~/.ssh // 如果没有密钥则不会有此文件夹,有则备份删除
2.生存密钥,使用以下命令生成SSH Key : $ ssh-keygen -t rsa -C “email@email.com”
  按3个回车,密码为空。  最后得到了两个文件:id_rsa和id_rsa.pub
3.打开 id_rsa.pub,复制里面的 key。三、为了验证是否成功,输入以下命令:ssh -T git@github.comgit remote :查看当前配置有哪些远程仓库git remote rm [alias] :删除远程仓库,alias为仓库别名,如origin创建本地仓库并联结远程仓库两种方式:第一种:1、新建一个空文件夹2、初始化 git init3、与远程仓库origin master建立连接 git remote add origin git@github.com:xxx/pname.git4、把远程分支拉到本地 git fetch origin healthyRight/20190124 // fetch并不会建立本地分支,这时 git branch 看不到本地分支,git branch -r 只看到 healthyRight/20190124 一个分支5、在本地创建分支并联结到远程分支 git checkout -b 本地分支名 origin/远程分支名git checkout -b health origin/healthyRight/20190124这样,就完成了本地创建分支并联结远程分支,如果要增加一个本地分支联结远程另一个分支,操作:git fetch origin healthyNewLife/20190221  // fetch并不会建立本地分支git checkout -b newlife origin/halthyNewLife/20190221此时git branch可以查看到两个本地分支了,但本地永远只显示当前分支项目文件,所以本地文件和开发工具中的文件会随着git checkout切换分支而变更。另一种简便方式:git clone -b 分支名 仓库地址 git clone 拷贝一个 Git 仓库(所有分支)到本地,并建立一个本地分支(默认master分支)。git clone后, 执行 git branch 可看到一个本地分支,git branch -r  可看到远程仓库所有分支。这样如果要增加一个本地分支联结远程另一个分支,不需要先git fetch获取远程分支,git clone下载了整个仓库,只需建立本地分支并联结远程分支:git checkout -b newlife origin/halthyNewLife/20190221查看本地分支和远程分支的跟踪关系:git branch -vv