1. git 的使用
git 仓库中有本地仓库和远程仓库
本地仓库:一个有 .git 文件夹的目录,git 会收集 .git 所在目录的所有变更,包含文件的修改、删除、新增、和替换
远程仓库:在远程服务器上的 git 仓库,常见项目托管:github、coding、(conding 用起来和 GitHub 一样,但是 coding 在国内,速度快)、公司自己搭建的 gitlab
新建远程仓库:登录 GitHub 账户 -> new -> 填写仓库信息 -> create repository
把远程仓库克隆到本地:git clone 仓库地址
- 找到你想放这个仓库的目录,右键 git bash here
- git clone 仓库地址
查看当前 git 仓库的配置信息
git config —list
查看当前本地仓库和那个远程仓库是连接的
git remote -v
git 的三个区:工作区、暂存区、历史区、(暂存区和历史区实在版本库中)
工作区:就是当前的仓库目录,我们可以在这里做任何修改
暂存区:准备成为版本的修改
历史区:已经成为版本的修改,只有放到历史区才能成为版本
创建一个版本:touch 文件名.拓展名 新建一个文件
vim 文件名 编辑文件
i 表示插入(可以向文件中插入)
esc 推出编辑状态
:w 保存
:q 退出
:wq 保存并退出
:q! 强制退出
- 首先在本地的 git 仓库中修改一些东西
- git status (查看本地仓库的状态)
如果文件为红色,表示这些文件处于工作区 - 把工作区的内容添加到暂存区
git add . 或者 git add 文件名 (当你的仓库中有的需要提交,有的不需要提交,就使用文件名一个一个 add) - 添加到暂存区以后检查仓库状态:git status
如果文件变绿了,说明文件已经添加到暂存区了 - 如果你添加完之后后悔了执行:
git rm —cached 文件名(把添加到暂存区的文件删除) - 或者使用暂存区的文件覆盖工作区中的文件(这种撤销要求暂存区中有这个文件)
git checkout 文件名 - 把暂存区中的修改添加到历史区
git commit -m’本次提交的描述’(执行过 commit 之后修改就成为了一个版本了)
commit 之后会形成一个版本,每个版本都有一个 id (版本号) - 把本地的版本同步到远程仓库,先 pull 再 push
git pull origin master
git push origin master
git diff 比较这次修改改了哪些东西
回滚:回退到某个版本
- 查看版本库中的历史记录,记录中有每次提交的版本号以及对应的注释;通过版本号,可以回退到任何版本
git log 【查看所有的版本记录(提交记录)】 - 从提交记录中找到你要回滚的版本号
git reset —hard 版本号 - 回滚后,要 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. 分支开发流程
- 克隆远程仓库到本地:git clone 仓库地址
- 在远程新建一个分支,例如:feature_011
- 在本地仓库新建一个和远程分支同名的分支,git checkout -b feature_011
- 同步本地分支和远程分支:git pull origin feature_011(分支名)
- 在本地开发(在目录中新建、修改文件)
- 适时的 add commit,并且要 push 到远程分支:git push origin featrue_011(分支名)【如果多人协作开发,在 push 到远程分支之前,先 pull 远程分支】
在 pull 到远程分支的时候可能有冲突,多人修改了同一个文件,就会冲突;冲突后就要解决冲突,谁发现冲突谁解决,所谓解决冲突,就是确定哪些代码要,哪些不要;解决冲突后,需要 commit 到历史区,然后再 push 到远程分支。 - 重复第6步直到开发完成
4. 分支提测
开发完成后把项目交给 qa 同事去测试
- 开发结束后我们都是用分支提测
- 一般 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. 上线(发版)
- 上线之前还需要再次同步 master 的代码到分支(再次把 master 的代码合并到分支上)
- 把分支和并到 master ,但是一般情况下,都是提交 merge request(MR), GitHub 上叫做 pull request
- 找有权限合代码的人,合并 MR
- 合完代码去找上线的人上线(一般都是运维的同事负责上线)
6. 多人协作
- 如果是 GitHub ,把成员添加到项目中 settings -> Collaborators -> 用 GitHub 名,然后再邀请,被邀请的人同意后才会加入到项目中
- 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
- 进入家目录,在 git bash 中输入:ad ~
- 进入到 .ssh:cd .ssh/ ,如果没有 .ssh ,需要新建 .ssh 文件夹:mkdir .ssh ,然后再 cd .ssh/
- 生成 ssh-key: ssh-keygen 一路回车
- cat id_rsa.pub 把输出的内容复制
- 把 ssh-key 添加到 github 或者 gitlab
- 后面再 clone 项目时改用 SSH 协议,以后所有的操作都不需要密码;
注意:ssh只对当前设备有效 换电脑就不能用了