初识Git
是一个免费开源, 分布式的代码版本控制系统, 帮助开发团队维护代码
作用: 记录代码内容,切换代码版本,多人开发时高效合并代码内容
Git和GitHub
Git是一个软件, Github是一个网站,两者的功能都是提供版本控制服务.
官网: GitHub: Let’s build from here · GitHub
安装Git
- 官网: https://git-scm.com/
- 快速下载: CNPM Binaries Mirror
- 下载安装包后, 双击安装, 全部默认下一步
- 验证: 打开bash终端 (git专用终端)
- 在vscode中, 打开终端, 切换到Git Bahs
- 或者 桌面空白处右键, 点击 Git Bash Here 打开Git命令行窗口
- 命令: git -v (出现版本号)
配置用户信息
表明身份, 让Git知道是谁在操作仓库
- git config --global user.name "用户名"
- git config --global user.email "邮箱地址"
- 验证: git config --list
- 或者单独查询 git config --global user.name || git config --global user.email
Git仓库
记录文件状态内容的地方, 储存着修改的历史记录
创建
- git仓库的本质是一个隐藏的文件夹, 隐藏起来是防止误删除
- 如果想要看到, 需要设置显示隐藏文件, 查看->显示隐藏文件夹
- 把本地文件夹转换成Git仓库: git init
- 从其他服务器上克隆Git仓库: git clone xxxx
管理流程
- 工作区: 实际开发时操作的文件夹
- 暂存制定文件: gti add 文件名
- 暂存所有文件: git add .
- 暂存区: 临时存在工作区的文件
- 查看暂存区文件: git ls-files
- 提交暂存区文件: git commit -m "提交说明"
- 版本库: 产生一个版本快照
文件状态
Git文件状态有
- 未跟踪: 新文件, 从未被Git管理过
- 已跟踪: 已经被管理的文件
- 查看文件状态:
git status -s 或 git status
操作暂存区
暂存区的作用就是临时存储代码, 减少代码的提交次数, 与版本库解耦合
从暂存区恢复文件: git restore 目标文件
从暂存区移除文件: git rm -- cached 目标文件
回退版本
把版本库某个版本对应的内容快照, 恢复到工作区/暂存区
查看提交历史:
- 简洁日志: git log --oneline (只包含提交操作的日志)
- 完整日志: git reflog --oneline (包含所有操作的日志)
回退命令:
- git reset --soft 版本号 (保留多余文件, 文件状态是未跟踪)
- git reset --hard 版本号 (清理多余文件, 工作区完全恢复到对应版本)
忽略文件
.gitignore文件可以让git彻底忽略跟踪指定文件, 避免重复无意义的文件管理
# 忽略依赖文件
node_modules
# 忽略分发文件夹
dist
# 忽略vscode文配置件
.vscode
# 忽略秘钥文件
*.pem
# 忽略证书文件
*.cer
# 忽略日志文件
.log
规则
- 该文件对当前目录及子目录生效
- #注释的内容
- * 代码通配符
- *.zip 过滤所有.zip文件
- 过滤文件夹:
- 直接写文件夹名
- 转译写法: /文件夹名/
- 过滤具体文件
- 直接写文件夹名 文件夹名/文件名
- 转译写法: /mtk/do.c
- 不要过滤
- !index.php
分支
分支的本质是一个容器, 里面装着提交的代码, 默认名字是master
作用
在开发新需求或者修复bug时, 保证主线代码随时可用, 多人协同开发提高效率
命令
- 查看分支 git branch
- 查看分支文件的状态 git status
- 创建分支 git branch 分支名
- 切换分支 git checkout 分支名
- 新建分支并切换 git checkout -b 分支名
- 合并分支 git merge 被合并的分支名 // 先切换到主分支, 再把目标分支合并到主分支
- 删除分支 git branch -d 分支名 // 先退出分支,才能删除分支
流程
- 如果新任务不想直接在主分支代码上进行, 要保证主分支代码的可用
- 先要创建新的分支 git branch 分支名
- 然后切换到新的分支 git checkout 分支名
- 开发编码完成后, 需要把分支合并到主分支
- 切换到主分支 git checkout master
- 合并目标分支 git merge 被合并的分支名
- 合并完成后, 分支就没用了, 删除分支 git branch -d 分支名
冲突
在不同分支, 对同一个文件的同一部分代码修改后, 就会产生合并冲突
- 代码冲突后多交流, 然后取舍代码
- 按照页面划分不同分支开发, 修改时尽量只修改自己相关的代码, 不要随意修改其他模块的代码
- 公共代码要统一维护, 组长负责修改, 其他成员只拉取,
- Node等软件的版本要统一, npm包统一维护, 由组长管理依赖, 其他成员只拉取
远程仓库
提交
托管在互联网或其他网络中的你的项目的版本库, 作用是保存项目, 对人协作
1.0基于Https鉴权
- 注册第三方托管平台网站账号
- 新建仓库得到远程仓库Git地址
- 本地Git仓库 添加 远程仓库原点地址
- 添加: git remote add 远程仓库别名 远程仓库地址
- 查看: git remote -v
- 移除: git remote remove 远程仓库别名
- 本地Git仓库推送版本记录到远程仓库
- git push -u 远程仓库别名 本地:远程分支名
- 删除已有的gitee账号凭证
- 控制面板->用户账户->凭据管理器->删除
2.0基于ssh鉴权
- 基于ssh协议只是身份鉴权的方式不同, 使用过程没区别
- 创建公私钥对文件
- ssh-keygen -t rsa -C "[email protected]" //执行指令,连续回车,生产公私钥对
- c盘->用户->当前账号->.ssh文件->id_ras.pub(文本打开) //获取公钥
- 在Github中配置好SSH
- 正常操作,克隆/添加/提交/同步
克隆
拷贝一个Git仓库到本地进行使用
- git clone 远程仓库地址
- 效果: 在运行命令的所在文件夹, 生成work项目文件夹
- 注意: Git本地仓库已经建立好和远程仓库的连接
- 注意: 仓库公开可以随意克隆, 推送需要身为仓库团队成员
协同开发
- 拉取代码: git pull 远程仓库别名 分支名
- 该命令是复合写法, 等价于:
- 等价于 git fetch 远程仓库别名 本地:远程分支名 (获取远程分支记录到本地,未合并)
- git merge 远程仓库别名/本地分支名 (把远程分支记录合并到所在分支下)
- 开发->拉取->推送, 先拉取再推送, 可以防止覆盖他人的代码
图形化操作
vscode编译器提供了图形化操作
- 打开更改的文件
- 恢复使用暂存区文件
- 把文件提交到暂存区
- 提交文件到远程仓库