Git的使用

184 阅读7分钟

目前最流行的版本控制工具(分布式版本控制工具) 另一个就是历史悠久的svn(集中式版本控制工具)

  • 版本:代码变更后 添加到版本库 这次变更就成为一个版本
  • 版本库: 记录所有的版本
  1. 集中式 有一个远程服务器 用来存储所有成员的代码和代码版本库 用户所有的版本都直接提交到远程服务器
  2. 分布式 有一个远程服务器,但是项目成员本地也有一个服务器,用于记录版本;如果想要提交版本到远程服务器,需要先将变更添加到本地版本,然后再把本地版本库同步给远程服务器。 svn 必须经由网络把变更推送到服务器才能生成版本;而且一般 svn 服务器都是部署在内网的; git 可以不用网络生成本地版本,但是把本地版本库同步到远程服务器是需要网络的;

git 的使用

  • 本地仓库:有.git文件夹的目录 在这个目录中git会手机所有的变更 文件的修改 新增 删除 等都会被git记录
  • 远程仓库:在远程服务器上的git仓库 常见的有 GitHub托管 coding托管 公司自己搭建的gitlab服务器

创建远程仓库 登录GitHub 创建远程仓库

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


git config --list //查看当前的配置信息
git remote -v //查看当前仓库与哪个仓库关联

git 的三个区

  • 工作区 本地的目录 可以对目录中的文件夹进行修改
  • 暂存区 准备生成版本的修改 在版本库中
  • 历史区 已经成为版本的修改 在版本库中
  1. 检查本地仓库文件状态 git status 有红色文件表这些文件的更改处于工作区中 绿色 表文件已经到暂存区
  2. 对比 git diff 工作区与暂存区比较
  3. 其他对比 git diff -cached 暂存区和历史区的比较
  4. git diff master 工作区与历史区的比较
  5. 经过diff 后 确认这些修改都要保留后将工作区添加到暂存区 git add . |文件名
  6. 添加后若后悔了 可以 删除暂存区中的文件 git rm --cached + 文件名
  7. 拉取暂存区中的文件覆盖当前工作区的内容(通常用来做放弃修改当前工作区中的修改,但是至于暂存区中有这个文件才能生效) git checkout + 文件名
  8. 暂存区添加到历史区 git commit -m '提交版本注释' 把暂存区的修改添加到历史区;添加到历史区就会生成一个版本,这个版本有一个版本号;注释一定要写,描述本次你改了什么,方便有一天你要回退到这个时间点
  9. 把本地的修改提交到远程仓库
    • git pull origin master 同步远程仓库中的版本库
    • git push origin master 把本地的版本库同步到远程仓库

回滚 (版本回退)

  1. 查看版本库中的历史记录 会有提交注释和版本号 通过版本号 可以回退到任意版本 git log
  2. 回退到某一版本(回滚 若上线出现问题 就会回滚到上一个)git reset --hard 版本号

git 分支

git的远程仓库 在创立之初存在一个默认分支master 这个分支成为主干 这个分支上保存着线上运行的代码 是经过测试后没有问题的代码 真实项目开发中我们一般不在 master 上做开发,都是基于 master 新开一个分支作为开发分支;每个分支都有自己的版本库,记录在不同的分支上的变更; 分支是在开分支一刻 master 的一个快照,master 里面的代码当时长什么样子,分支里面的代码就会长什么样子;接下来所有的开发都是在分支上完成的;

  • 新建并切换到新分支 git checkout -b 分支名 | git branch 分支名(不会自动切换到分支)
  • 分支切换 gitcheckout 目标分支名
  • 删除分支 git branch -D 分支名
  • 合并分支 git merge 分支1 (把分支1 的修改合并到当前分支)

分支合并

  • 当开发完成后再把分支合并到 master 上
  • 在合并之前要同步 master 上的代码到分支上
  • 然后再把分支合并到 master,此时 master 就有了本次分支开发的内容,
  • 最后再把本地 master 的版本库同步到远程的 master,可以 push,一般使用 merge request;

分支开发流程

  • 首先克隆远程仓库到本地:git clone xxx.xxxx.xxxx,此时本地仓库的分支处于 master
  • 在远程开一个分支,在 github 或者 gitlab 上操作,这个分支称为远程分支,例如分支名 feature_0711
  • 在本地开一个和远程分支名字相同的本地分支:git checkout -b feature_0711
  • 同步本地分支和远程分支,git pull origin feature_0711
  • 在本地开发,开始修改本地目录中的文件;
  • 适时的 add commit,然后同步远程分支,具体操作如下:(防止丢失或者本地误删)
    • add commit 生成本地版本,然后 pull 远程分支,意义在于把其他同事的代码同步到本地;
    • 如果同步远程分支时出现冲突,那就要解决冲突(谁发现冲突谁解决,必要时把和你冲突的同事叫来问他哪些要哪些不要);
    • 解决完冲突后,把本地分支同步到远程分支 git push origin feature_0711;

分支提测

  • 当开发结束后用分支提测,feature_0711
  • 一般会要同步 master 上的代码,就是把 master 代码合并到当前分支,具体操作如下:
  • 从当前分支 feature_0711 切换到 master
  • 切换到 master 后执行 git pull origin master 同步远程 master 代码到本地
  • 然后再切换回分支 feature_0711,在分支上把 master 的代码合并到分支;
  • 如果有冲突,就解决冲突;解决完冲突 add commit 然后 push 到远程分支; **测试阶段如果修改 bug 只需要在分支上修改,然后 add commit,然后再 push 到远程分支; **

上线发版

  • 同步 master 上的代码,然后 push 到远程分支;
  • 把分支合并到 master,如果你是项目所有人你可以 push 到 master;但是一般人需要提交 merge request(github上pull request);
  • 提交 merge request 后,找有权限的人合并;
  • 合并后通知上线人员发版(一般是运维的人);

多人协作时

  • 如果使用 github,把项目成员添加到 settings -> collaborators -> add collaborators
  • 如果使用 gitlab,你入职的时候找领导给你开账号,然后让他把你加到项目中就可以了;

SSH-KEY

  • ssh-key 是建立 ssh 时需要的公钥;这个东西在你的机器上,通过命令行生成,生成后把这个秘钥放到 github 或者 gitlab 上;
  • 然后建立 ssh 连接时,会自动从本地读取秘钥,github 会比对之前存储的秘钥和本次连接携带的是否一样,如果一样就连上了,从而摆脱输入密码的困扰

使用步骤

  • 生成 ssh-key:进入到家目录;在 git bash 中输入:cd ~
  • 进入家目录中的 .ssh/ 目录:cd .ssh/,如果没有可以新建:mkdir .ssh
  • 执行:ssh-keygen 一路回车即可
  • cat id_rsa.pub 文件
  • 复制上一步 cat 出来的结果
  • 打开 github 或者 gitlab,进入个人设置 settings -> SSH and GPG keys -> new SSHKey
  • title 是对这个 key 的描述,把复制的 key 粘贴到 key 中,点击 Add SSH key;
  • 后面再 clone 项目时改用 SSH 协议,以后所有的操作都不需要密码; SSH 只对当前的设备有效 换电脑就不行了