解 git 和 github

git => 分布式版本管理器

+ 安装再你电脑里面的一个软件

+ 用来管理你的文件夹

=> 管理: 管理文件夹内文件的时间节点

+ 把文件夹内的代码上传

=> 上传到一个指定的远程位置

+ 和百度云盘的区别

=> 百度云盘有一个可视化界面

=> git 没有可视化界面, 需要再命令行操作

github => 一个网站

+ 线上的一个网站

+ 保存你使用 git 上传的代码

+ 类似社交平台, 社交功能并不能即时

+ 开源代码: 想广大用户开放我的代码

码云 => 一个网站

+ 和 github 的功能是一样的

+ github 是国外的 - 全英文网站

+ 码云 是国内的 - 中文网站

git 的安装

+ 不是一个 javascript 的工具

+ 不能使用 npm 直接安装

下载: git 官网

+ https://git-scm.com/downloads

安装: 双击安装包

+ 一路下一步

检测:

1. 鼠标再桌面任意位置点击右键

+ 出现 git bash here 和 git gui here

2. 打开命令行

+ 输入指令 $ git --version

+ 出现版本号就表示安装成功

首次安装配置

+ 再你的电脑第一次安装 git 的时候需要配置一些全局内容

+ 为了你将来上传的时候的签名使用

+ 打开 cmd 窗口, 进行配置

+ 查看全局配置

=> 打开命令行, 目录无所谓

=> 输入指令 $ git config --list

+ 配置全局邮箱

=> 打开命令行, 目录无所谓

=> 输入指令 $ git config --global user.email "你的邮箱"

=> 邮箱: 随便写一个也可以, 最好是一个真实邮箱, 最好是你 github 注册的邮箱

+ 配置全局用户名

=> 打开命令行, 目录无所谓

=> 输入指令 $ git config --global user.name "你的用户名"

=> 用户名: 随便写一个就可以, 最好是你 github 的用户名

+ 可以不进行配置

=> 不影响你 git 的使用, 但是你只能使用 git 进行本地文件管理

=> 不能上传到远程, 一旦上传远程的时候, 需要你又全局配置

git 的应用

+ 安装完毕 git 以后

+ 你就可以再命令行使用 git xxx 的指令

+ git 安装的同时还给你提供了一个新的命令行工具

+ 叫做 git bash

=> 也是一个命令行工具, 只不过是五彩斑斓的

+ 鼠标右键, git bash here, 表示再当前目录下打开 git 命令行

+ 之后, 我们使用 git 这个工具操作一些内容的时候

=> 可以选择再 cmd 窗口操作

=> 也可以选择再 git bash 窗口操作

git 初体验

+ git 可以管理你本地的文件夹

+ 但是它不会自动管理

+ 你想让你的文件夹被 git 管理, 需要告诉他一下

1. 本地仓库初始化

+ 需要把一个文件夹初始化为一个 git 仓库

+ 这个文件夹及所有后代文件夹及文件才会被 git 管理

+ 打开命令行(cmd, git bash)

=> 切换到你需要 git 管理的目录

=> 输入指令 $ git init

=> 会提示初始化空仓库成功

=> 你的文件夹里面会多一个 .git 的文件夹(隐藏文件夹)

=> 表示 .git 所在的文件夹及所有后代目录被 git 管理了

=> 就叫做一个本地仓库

2. 把工作区的内容添加到暂存区

+ 你的工作区要有内容(.git 不算)

=> 注意: 空文件可以添加, 但是空文件夹不管

=> 注意: 如果没有形成历史版本之前, 暂存区的同文件会被覆盖

+ 打开命令行, 切换到 .git 所在的目录

=> 输入指令

1. $ git add 文件名

2. $ git add 文件夹名称

3. $ git add --all

-> 表示把当前工作区里面的所有没有添加到暂存区的内容都加进去

-> 简写形式 $ git add .

3. 查看工作区和暂存区状态

+ 打开命令行, 切换到 .git 所在的目录

+ 输入指令 $ git status

4. 暂存区撤回内容

+ 打开命令行, 切换到 .git 所在的目录

+ 输入指令

1. $ git reset HEAD -- 文件名

2. $ git reset HEAD -- 文件夹名称

3. $ git reset HEAD -- .

-> 撤回暂存区所有的内容

5. 形成历史版本

+ 把暂存区的内容形成一个历史版本

=> 前提: 需要暂存区有内容

+ 打开命令行, 切换到 .git 所在的目录

+ 输入指令

=> $ git commit -m "说明"

+ 就会形成一个历史版本

6. 查看历史版本

+ 查看本地已经形成的历史版本

+ 打开命令行, 切换到 .git 所在的目录

+ 输入指令 $ git log

+ 就会以倒叙的形式出现你本地所保存的所有历史版本

7. 回滚历史版本

+ 回到之前记录的某一个历史版本的时间状态

+ 打开命令行, 切换到 .git 所在的目录

+ 输入指令 $ git reset --hard 版本id

+ 就可以回到当时的状态

+ 注意:

=> 历史回滚的时候, 回到了过去

=> 再过去的基础上新增了历史版本

8. 删除历史版本

+ 打开命令行, 切换到 .git 所在的目录

+ 输入指令 $ git rebase -i 历史版本id

1. 历史版本, 不能写你要删除的那个历史版本

=> 要写前一个历史版本 id

2. 再删除的时候, 进入编辑状态以后

=> 需要把 pick 修改为 drop

=> 再次保存退出就可以了

+ 前提:

=> 如果你已经上传, 你删除的只是本地的历史记录

=> 但是远程地址上的记录还在保存

git 上传远程

+ 上传可以选择上传到 github 也可以选择上传 gitee(码云)

+ 上传: 向远程传递的不是 .git 所在的文件夹

=> 位是这个文件夹里面的所有内容

1. 建立一个远程仓库

+ 就是再 github 上建立一个 "文件夹"

+ 打开 github 页面 -> 右上角加号 -> new repository

=> repository name 必填, 表示远程仓库名称("文件夹" 名称)

=> 描述可以写可以不写(可以写中文)

=> 点击 create repository 就创建成功了

2. 再文件夹里面保证有一个没有上传的历史版本

3. 添加一个远程仓库地址

+ 打开命令行, 切换到 .git 所在的目录

+ 输入指令 $ git remote add origin 你的仓库地址

=> remote: 远程

=> add: 添加

=> origin: 变量名, 你可以自己随便书写, 代表了你的远程仓库地址

=> 仓库地址: 你准备上传的远程仓库的地址

-> 如果你上传 github 就填写 github 地址

-> 如果你上传 gitee 就填写 gitee 地址

-> 注意: 暂时我们先使用 https 的地址

+ 添加完毕以后

=> 只要还在这个文件夹里面

=> 将来上传只要你指明上传到 origin 地址, 就是上传到现在添加的这个仓库

4. 把历史区的内容推送到远程

+ 打开命令行, 切换到 .git 所再得目录

+ 输入指令: $ git push -u origin master

=> push: 推送

=> -u: 记录下你本次推送到哪一个地址哪一个分支

-> 如果下次你步进行修改, 还是推送到这个地址这个分支

-> 不需要再写后面得, 直接写 git push 就可以了

=> origin: 推送到哪一个地址

=> master: 分支

拉去远程代码

+ 分成两种形式

1. 自己拉取自己得代码

2. 自己拉取别人得代码

拉去自己得代码

1. 第一次拉取

+ 克隆远程仓库到本地

+ 复制 github 上面某一个 "文件夹" 到本地

+ 打开 github, 找到你要复制得仓库

=> 复制远程仓库得地址

=> 再本地找到一个你需要存放这个文件夹得位置

=> 打开命令行

=> 输入指令 $ git clone 远程仓库地址

=> 复制一份一摸一样得文件夹来到你的指定目录

+ 这个文件夹是已经被 git 初始化过得仓库

=> 并且里面记录了一个远程仓库地址

=> 你修改以后, 上传还是上传到 clone 这个文件夹得远程仓库

2. 第 n 此拉取

+ 不需要再次克隆了

+ 你只需要进到你第一次克隆下来得文件夹里面

+ 打开命令行, 再 .git 所在目录

+ 输入指令 $ git pull

拉去别人得代码

+ 你要去到别人得仓库地址

1. 第一次拉取, 直接克隆

=> 找一个位置, 输入指令 $ git clone 地址

2. 第二次以后, 直接拉取

=> 还进入到第一次克隆得文件夹里面, 输入指令 $ git pull

+ 如果你修改了内容再次上传得时候

=> 不能成功得, 需要别人得用户名和密码

了解三个 git 相关得文件

1. git 占位文件

+ 当你使用 git 管理你得文件夹得时候

+ 空文件夹不管

+ 初始化项目得时候, 先把目录结构准备好, 上传一次

=> 就会有 img 文件夹

+ git 给我们提供了一个这样得文件

=> 叫做 .gitkeep

=> 没有名称只有后缀

+ 没有特殊意义, 就是为了再空文件夹得时候

=> 进行占位, 保持文件夹结构

2. git 忽略文件

+ 在你得开发过程中, 我们会下载一些第三方

+ node_modules 文件夹里面得文件又多又碎, 最好不上传

+ 我只要初始化项目得时候, 生成 package.json 文件

=> 只要 package.json 文件留下来

+ 我上传得时候就不要上传 node_modules

+ git 给我们准备了一个文件叫做 .gitignore

=> 只有后缀没有名字得文件

=> 载里面书写你不希望 git 帮你管理得文件或者文件夹

+ 这个文件再 .git 文件同级目录建立

3. git 说明文件

+ readme.md

+ 对你当前仓库内容得描述和说明解释

+ 你按照 md 得规则书写

+ 传递到远程得时候, readme 会自动显示再当前仓库得下面

=> 以 html 结构显示内容, 直接让你看到

推荐一个浏览器插件

+ octotree

git 分支

+ 当你初始化仓库以后, 会自动生成一个分支叫做 master

=> 叫做主要分支, 根分支

+ 我们可以开辟更多得分支, 去分别书写内容

=> 每一个分支上得内容相对独立

1. 创建一个分支

+ 打开命令行, 切换到 .git 所在得目录

+ 输入指令 $ git branch 你自定义得分支名称

+ 注意: 你的当前分支内有什么, 你开辟出来得分支相当于把你的内容复制一份

=> 每一个分支创建得时候, 都是所在分支得所有内容

2. 查看分支情况

+ 打开命令行, 切换到 .git 所在得目录

+ 输入指令 $ git branch

+ 你就能查看到当前分支情况

3. 切换所在分支

+ 打开命令行, 切换到 .git 所在得目录

+ 输入指令 $ git checkout 你要去到得分支名称

+ 就会切换你所在得分支

4. 合并分支

+ 合并操作: 只能是你站在哪一个分支上, 把别的分支得内容合并到自己身上

+ 打开命令行, 切换到 .git 所在得目录

+ 输入指令 $ git merge 你要合并过来得分支

+ 指定分支上的所有内容就会合并到你的身上

5. 删除本地分支

+ 离开你要删除的分支

+ 打开命令行, 切换到 .git 所在得目录

+ 输入指令 $ git branch -d 你要删除的分支

=> 如果分支上有些历史版本

=> 还有一些没有形成历史版本的临时文件

=> 那么这个分支可能删除不掉

+ 离开你要删除的分支

=> 强力删除分支的指令

=> 不管分支里面又什么都直接删除

=> 打开命令行, 切换到 .git 所在的目录

=> 输入指令 $ git brach -D 你要删除的分支

分支的远程操作

+ 当你建立的其他分支以后, 默认是不会上传到远程的

=> 因为 git 默认上传 master 分支

+ 当你上传的时候

=> $ git push -u origin master

=> 把当前分支和远程的 master 分支建立连接

1. 把自定义分支的内容上传

=> 切换到你要上传内容的分支

=> 打开命令行, 切换到 .git 所在的目录

=> 输入指令 $ git push origin 分支名称

2. 删除远程分支

=> 打开命令行, 切换到 .git 所在的目录

=> 输入指令 $ git push origin --delete 你要删除的分支名称

扩展:

+ 一个特殊分支

+ gh-pages

+ 可以把你的 github 变成一个临时的线上服务器

=> 只要你在这个 分支上 上传一个叫做 index.html 的文件, 可以直接访问

=> 如果上传的不是 index.html 那么你访问的时候需要自己书写文件名

+ 上传到 gh-pages 分支以后

=> 来到 github 上, 切换到 gh-pages 分支

=> 点击 settings

=> 下来到 github pages 位置会给你一个地址

=> 如果你的 html 文件叫做 index, 直接访问地址

=> 如果你的 html 文件叫做 abc, 你就访问 地址 + abc.html

分支的命名规范

+ 大家约定俗成的东西

1. 主分支 - master

=> 创建 git 仓库的时候就会生成的

=> 不接受任何代码上传

=> 只接收 dev 分支合并的内容

=> 只存储每一个迭代版本中经过测试合格的版本

2. 主开发分支 - dev / development / deve

=> 初始化项目以后, 就会直接从 master 上开辟的分支

=> 不接受任何代码上传

=> 只接收 主功能分支 合并的内容

=> 存储再开发过程中的每一个阶段内容

3. 主功能分支 - feature-xxx

=> 直接从 dev 分支上开辟出来的分支

=> 进行各个功能的开发

=> 开发完毕以后吧代码合并到 dev 分支上

=> 接收文件上传

4. 功能 bug 解决分支 - feature-xxx-fix-xxx

=> 再项目运行过程中, 出现 bug 进行修复的分支

=> 都是从 功能分支 上开辟出来的

=> 修改完毕以后合并到 功能分支上

=> 再由功能分支合并到 dev 分支上

5. 紧急 bug 解决 - hot-fix-xxx

=> 直接从 master 上开辟

=> 进行紧急的 bug 修复

=> 修复完毕以后, 直接合并到 master 上

密钥

+ github 上传除了可以使用 https 的地址

=> 还有一个地址是 ssh 的地址

=> 需要在你的电脑里面配置一个密钥, 然后直接登录

1. 打开命令行, 目录无所谓

2. 输入指令 $ ssh-keygen -t rsa -C "你Git工具的全局邮箱"

=> 回车以后会要求你填写二次验证密码

=> 可以不写, 直接三个回车

=> 生成密钥

3. 去到你的电脑里面找到密钥

=> 找到目录下的 pub 文件

=> 复制文件内的全部内容

4. 来到 github

=> 右上角用户 -> settings

=> 选择 SSH

=> 点击 SSH key 后面的 new SSH key

=> title 位置随便写

=> key 的位置书写你粘贴下来的密钥

5. 添加成功了

=> 以后你就可以使用 ssh 地址上传和下载了