乐趣区

GIT使用指南

基本概念
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.com

git remote : 查看当前配置有哪些远程仓库
git remote rm [alias] : 删除远程仓库,alias 为仓库别名,如 origin


创建本地仓库并联结远程仓库两种方式:第一种:1、新建一个空文件夹
2、初始化 git init
3、与远程仓库 origin master 建立连接 git remote add origin git@github.com:xxx/pname.git
4、把远程分支拉到本地 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
退出移动版