1. git 的使用

git 仓库中有本地仓库和远程仓库

本地仓库:一个有 .git 文件夹的目录,git 会收集 .git 所在目录的所有变更,包含文件的修改、删除、新增、和替换

远程仓库:在远程服务器上的 git 仓库,常见项目托管:github、coding、(conding 用起来和 GitHub 一样,但是 coding 在国内,速度快)、公司自己搭建的 gitlab

新建远程仓库:登录 GitHub 账户 -> new -> 填写仓库信息 -> create repository

把远程仓库克隆到本地:git clone 仓库地址

  1. 找到你想放这个仓库的目录,右键 git bash here
  2. git clone 仓库地址

查看当前 git 仓库的配置信息
git config —list

查看当前本地仓库和那个远程仓库是连接的
git remote -v

git 的三个区:工作区、暂存区、历史区、(暂存区和历史区实在版本库中)
工作区:就是当前的仓库目录,我们可以在这里做任何修改
暂存区:准备成为版本的修改
历史区:已经成为版本的修改,只有放到历史区才能成为版本

创建一个版本:touch 文件名.拓展名 新建一个文件

vim 文件名 编辑文件
i 表示插入(可以向文件中插入)
esc 推出编辑状态
:w 保存
:q 退出
:wq 保存并退出
:q! 强制退出

  1. 首先在本地的 git 仓库中修改一些东西
  2. git status (查看本地仓库的状态)
    如果文件为红色,表示这些文件处于工作区
  3. 把工作区的内容添加到暂存区
    git add . 或者 git add 文件名 (当你的仓库中有的需要提交,有的不需要提交,就使用文件名一个一个 add)
  4. 添加到暂存区以后检查仓库状态:git status
    如果文件变绿了,说明文件已经添加到暂存区了
  5. 如果你添加完之后后悔了执行:
    git rm —cached 文件名(把添加到暂存区的文件删除)
  6. 或者使用暂存区的文件覆盖工作区中的文件(这种撤销要求暂存区中有这个文件)
    git checkout 文件名
  7. 把暂存区中的修改添加到历史区
    git commit -m’本次提交的描述’(执行过 commit 之后修改就成为了一个版本了)
    commit 之后会形成一个版本,每个版本都有一个 id (版本号)
  8. 把本地的版本同步到远程仓库,先 pull 再 push
    git pull origin master
    git push origin master

git diff 比较这次修改改了哪些东西

回滚:回退到某个版本

  1. 查看版本库中的历史记录,记录中有每次提交的版本号以及对应的注释;通过版本号,可以回退到任何版本
    git log 【查看所有的版本记录(提交记录)】
  2. 从提交记录中找到你要回滚的版本号
    git reset —hard 版本号
  3. 回滚后,要 push 到远程仓库,远程仓库中的内容才会跟着回滚;
    回滚后 push 需要强推
    git push origin master -f 【-f 表示强制】
    注意:不要轻易回滚,如果线上有 bug,不严重的情况下(不影响用户使用),紧急修复,然后紧急上线;

2. git 分支

master 分支:在远程仓库创立的时候会默认创建一个 master 分支,这个分支叫做主干,主干分支上保存的就是线上运行的代码,这些代码都是经过测试,没有问题的代码

基于 master 的开发分支:真实项目中,我们一般不是直接在 master 分支上开发。而是基于 master 新开一个开发分支;每个分支都有自己的版本库,记录发生在当前分支上的变更

我们新开的分支,一般都是基于 master 开分支;新开的分支相当于在开分支的那一刻的 master 的快照(master 里面的代码什么样,分支里面的代码就什么样)接下来所有的开发都是在分支上完成的;写在分支上的东西如果不合并到 master,master 上是不会有的。

合并分支:当开发完成后,要把分支合并到 master,因为线上跑的都是 master 的代码,而我们在分支里面开发的代码,master 里面是没有的;但是在分支合并到 master 之前,我们需要先把 master 上的代码同步到分支上,然后再把分支合并到 master。

创建一个本地分支:(创建分支前同步 master 的代码)
git checkout -b 分支名 【创建新分支并且切换到新分支】
git branch 分支名 【新建分支,分时不会切到开发分支上】
git branch -v 查看当前所有的分支,前面带*表示当前所处的分支;

切换分支
git checkout 分支名【从当前分支切换到某个分支】
git checkout master 切换到 master 分支

删除分支
git branch -d 分支名

合并分支:
git merge 分支名 【把指定分支合并到当前分支】

3. 分支开发流程

  1. 克隆远程仓库到本地:git clone 仓库地址
  2. 在远程新建一个分支,例如:feature_011
  3. 在本地仓库新建一个和远程分支同名的分支,git checkout -b feature_011
  4. 同步本地分支和远程分支:git pull origin feature_011(分支名)
  5. 在本地开发(在目录中新建、修改文件)
  6. 适时的 add commit,并且要 push 到远程分支:git push origin featrue_011(分支名)【如果多人协作开发,在 push 到远程分支之前,先 pull 远程分支】
    在 pull 到远程分支的时候可能有冲突,多人修改了同一个文件,就会冲突;冲突后就要解决冲突,谁发现冲突谁解决,所谓解决冲突,就是确定哪些代码要,哪些不要;解决冲突后,需要 commit 到历史区,然后再 push 到远程分支。
  7. 重复第6步直到开发完成

4. 分支提测

开发完成后把项目交给 qa 同事去测试

  1. 开发结束后我们都是用分支提测
  2. 一般 qa 会要求同步 master 的代码(合一下 master 提测),就是把 master 上的代码合并到分支上
    2.1 本地分支切换到 master
    2.2 pull master,使本地的 master 里面的代码和远程 master 同步
    2.3 切换到开发分支 feature_011
    2.4 执行合并:git merge master —no-ff 【是把 master 合并到 feature_011】
    2.5 合并 master 以后如果有冲突,需要解决冲突(解决冲突的方式是和之前一样的)解决完冲突再 commit 然后 push 到远程分支
    2.6 接着就用开发分支提测(如果没有提测文档,需要把分支名发给 qa 的同事)
    2.7 在测试的过程中发现了 bug 就在原来的开发分支feature_011 上改,然后 add ,commit 再 push 到远程分支上
    注意:所有的 push 之前都要pull

5. 上线(发版)

  1. 上线之前还需要再次同步 master 的代码到分支(再次把 master 的代码合并到分支上)
  2. 把分支和并到 master ,但是一般情况下,都是提交 merge request(MR), GitHub 上叫做 pull request
  3. 找有权限合代码的人,合并 MR
  4. 合完代码去找上线的人上线(一般都是运维的同事负责上线)

6. 多人协作

  1. 如果是 GitHub ,把成员添加到项目中 settings -> Collaborators -> 用 GitHub 名,然后再邀请,被邀请的人同意后才会加入到项目中
  2. gitlab 老大会开账号,然后加入到项目中。

7. ssh-key

项目中使用 git 不是每次都需要输入密码,输入密码效率低,而是使用一个 ssh-key 的东西,ssh-key 是建立 ssh 连接时需要的公钥,这个公钥存储在电脑上,通过命令行生成的,生成以后要把这个公钥放在 GitHub 上或者 gitlab

等下一次建立 ssh 连接时(pull 和 push),会自动从电脑上读取这个秘钥,然后带着公钥一起去 GitHub 或者 gitLab 的服务器上,GitHub 或者 gitLab 服务器会对比你带来的秘钥和之前 GitHub 或者 gitlab 上的是否一样,如果一样,就不需要再输入密码了直接操作

使用 ssh-key 的步骤 生成 ssh-key

  1. 进入家目录,在 git bash 中输入:ad ~
  2. 进入到 .ssh:cd .ssh/ ,如果没有 .ssh ,需要新建 .ssh 文件夹:mkdir .ssh ,然后再 cd .ssh/
  3. 生成 ssh-key: ssh-keygen 一路回车
  4. cat id_rsa.pub 把输出的内容复制
  5. 把 ssh-key 添加到 github 或者 gitlab
  6. 后面再 clone 项目时改用 SSH 协议,以后所有的操作都不需要密码;
    注意:ssh只对当前设备有效 换电脑就不能用了