解 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 地址上传和下载了

一些常用git命令:
拉取代码: git pull
指定分支拉取: git pull 分支名
提交代码: git commit -m '提交信息'
推送代码: git push
新建分支: git branch 分支名
切换分支: git checkout 分支名
查看当前所有分支: git branch
查看远程所有分支: git branch -r
创建并切换分支: git checkout -b 分支名
合并分支: 如dev合并到master,先切换至master分支,之后执行git merge 要合并过来的分支名
查看冲突或未合并文件: git status

posted on 2021-10-11 17:09  phantom_yy  阅读(56)  评论(0编辑  收藏  举报