前后端交互(三)——Git 和 Github
目录
一.Git基础
1.版本管理 和 Git
- 版本管理:记录文件变化的方式,以便将来查阅 特定版本的 文件内容
- 人为维护文档版本的问题:
- 数量多、命名不清晰,导致文档版本混乱
- 每次编辑文档需要复制,不方便
- 多人同时编辑同一个文档,易产生覆盖
- Git:是一种 版本管理控制系统(VCS),将文档的状态作为 更新记录 保存起来,可在任何时间点 恢复更新记录
2.Git 基本工作流程
- 工作流程图解:
3.Git 使用
3.1 使用前配置
- 在使用 git 前,需要告诉 git 你是谁:
- 配置提交人姓名:
git config --global user.name 提交人姓名
- 配置提交人姓名:
git config --global user.email 提交人邮箱
- 查看 Git配置信息:
git config --list
- git 初始化配置:
- 如果要对配置信息进行修改,重复上述命令即可
- 配置只需要执行一次
3.2 提交
git init
初始化git仓库git status
查看文件状态git add 文件列表
追踪文件git commit -m 提交信息
向仓库中提交代码git log
查看提交记录
- 初始化仓库、查看状态:
- 添加到暂存区、追踪文件:
- 添加提交信息,从暂存区到仓库:
3.3 撤销
- 用暂存区中的文件覆盖工作目录中的文件:
git checkout 文件
- 将文件从暂存区中删除:
git rm --cached 文件
- 将 git 仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录:
git reset --hard commitID
- 用暂存区文件覆盖工作目录文件 :
- 相当于撤回到某个时间点之前的版本:
git reset --hard commitID 详解:
二.Git进阶
1.分支
- 分支是 当前工作目录中 代码的一份副本
- 使用分支,可以从开发主线上分离出来,以免影响开发主线
2.分支细分
- 主分支(master):第一次向 git 仓库中提交更新记录时,自动产生的一个分支
- 开发分支(develop):作为开发的分支,基于 master 分支创建
- 功能分支(feature):作为开发具体功能的分支,基于开发分支创建
- 功能分支 -> 开发分支 -> 主分支
3.分支命令
git branch:
查看分支git branch 分支名称:
创建分支git checkout 分支名称:
切换分支git merge:来源分支
合并分支git branch -d 分支名称:
删除分支(分支被合并后才允许删除)(-D 强制删除)
- 查看、创建、切换分支:
- 切换分支的时候,暂存区的文件必须 commit提交:
- 比如我现在在开发分支上,暂存区存在文件 A.html,我切换到了主分支,此时 A.html就会跟着到主分支的 项目文件中展示,而不是待在开发分支的 项目文件中展示;此时切回开发分支,对 A.html文件进行 commit 提交,再切换到主分支,A.html 就不会跟随来到主分支,而是待在开发分支
- 合并分支,合并到谁就先切换到谁,再合并:
- 合并后才能删除(未合并强删-D):
4.暂时保存更改
- 在git中,可以暂时提取分支上所有的改动并存储,得到一个干净的工作副本,转向其他工作
- 使用场景:分支临时切换,比如老板让你修改主分支bug,你还在开发分支开发新功能,此时可以利用 剪切,保存当前开发分支的修改,然后切换到主分支进行bug修改,修改完成后,切回开发分支,进行粘贴,恢复之前的操作
- 存储临时改动(剪切):
git stash
- 恢复改动(粘贴):
git stash pop
恢复改动的命令也可以在别的分支上进行,比如剪切开发分支1,在开发分支2进行粘贴,这是可以的
三.Github
1.多人协作开发流程
- A在自己的计算机中 创建本地仓库
- A在 github中创建 远程仓库
- A将本地仓库 推送到远程仓库
- B克隆远程仓库到本地 进行开发
- B将本地仓库中开发的内容 推送到远程仓库
- A将远程仓库中的 最新内容 拉去到本地
2.创建仓库
- 填写仓库基本信息:
- 跳转到:
3.将本地仓库推送到远程仓库
- git push 远程仓库地址/别名 分支名称
- git push -u 远程仓库地址别名 分支名称
- -u 记住推送地址及分支,下次推送只需要输入git push即可
- git remote add 远程仓库地址别名 远程仓库地址(这是给远程仓库地址起别名的命令)
- 写入时要进行身份验证,只需输入一次Github账号密码,电脑会自动在此处存储账号密码:
4.拉取操作
- 克隆远端数据仓库到本地:
git clone 仓库地址
- 克隆仓库:
- B程序员需要A程序员进行远程仓库的设置 赋予权限,才能够将自己更新的项目上传到A的远程仓库:
- A将上图中的邀请链接发送给B,B需要登录Github,并在其中跳转到邀请链接,接受邀请,才能进行本地推送
- 进行克隆操作的时候,远程仓库地址的别名也会被一起复制,所以B也可以用A的远程仓库地址别名进行git push
- 拉取远程仓库中最新的版本:
git pull 远程仓库地址 分支名称
- 如果本地仓库的版本低于远程仓库版本,那就无法进行push,必须先pull/clone更新到最新版本,然后再push自己更新的内容
区分:
- git pull:是存在本地仓库的情况下,将远程仓库的最新版本拉取到本地
- git clone:是不存在本地仓库的情况下,将远程仓库全部克隆到本地
5.解决冲突
- 在多人同时开发一个项目时,如果两个人修改了同一个文件的同一个地方,就会发生冲突,需要人为解决
- 上述可以理解为:AB同时修改了某个文件的某个部分,A先对远程仓库提交了,B提交就会报错,此时B可以去审视自己修改的部分和A冲突的部分,人工选择保留的部分,修改完成后进行上传
6.跨团队协作
- 如果 AB是团队合作,C只是个路人,想修改 AB代码,却没有权限,此时可以采用下面方法:
- 程序员 C fork仓库(相当于复制A远程仓库到自己的远程仓库)
- 程序员 C 将仓库 克隆clone 在本地进行修改
- 程序员 C 将仓库 推送push 到远程
- 程序员 C 发起pull reqest(向A提交自己的修改)
- 原仓库作者审核
- 原仓库作者合并代码
- C fork仓库:
- C把修改后的推给A:
- A收到了C的提交并对话:
- A审核通过,合并了C代码:
7.SSH免密登陆
- https协议仓库地址:https://github.com/itcast-frontEnd/git-demo.git
- 不想频繁的输入 Github账号密码 的解决方式,利用SSH免密登陆
- 生成秘钥:
ssh-******
- 秘钥存储目录:C:\ Users\ 当前用户\ .ssh
- 公钥名称:id_rsa.pub
- 私钥名称:id_rsa
- Github会自动 用公钥与电脑中的私钥进行配对,如果配对成功,则推送成功,反之则不
- 给Github添加公钥:
- 打开仓库,复制SSH地址:
- 推送操作和之前完全相同,不同的是将地址改成了 SSH地址,这样就不用输入账号密码了
8.Git忽略清单
- 在执行 Git命令的时候,不想管理的文件,比如测试文件、第三方包等等
- 将不需要被 Git管理的文件名字添加到 .gitignore文件,Git就不会将他们添加到 暂存文件库
- git忽略清单文件 .gitignore:
- 将工作目录中的文件 全部添加 到暂存区:git add .
- 可以在项目目录中新建 README.md文件,对自己的仓库做出说明,这个文件内容会自动展示在远程仓库中