-
概念:一个免费开源,分布式的代码版本控制系统,帮助开发团队维护代码
-
作用:记录代码内容,切换代码版本,多人开发时高效合并代码内容
-
个人本机使用:Git基础命令和概念
-
多人共享使用:团队开发同一个项目的代码版本管理
-
安装成功
- 打开bash终端(git专用)
# 查看版本命令
git -v
- Git配置用户信息
- 配置:用户名和邮箱,应用在每次提交代码版本时表明自己身份
# 设置用户名和邮箱
git config --global user.name "username"
git config --global user.email "userEmail"
# 查看属性(如果没有出现,则按↓继续查找,直到出现END)
git config --list
- Git仓库(repository):记录文件状态内容的地方,存储着修改的历史记录
- 创建
- 把本地文件夹转换成Git仓库
# 初始化仓库
git init
- 从其他服务器上克隆Git仓库
git clone "url"
- Git使用时:
- 工作区:实际开发时操作的文件夹
- 暂存区:保存之前的准备区域(暂存改动过的文件)
- 版本库:提交并保存暂存区中的内容,产生一个版本快照(返回一个6字节的hash值)
# 暂存指定文件
git add 文件名
# 暂存所有改动的文件
git add .
# 提交并保存,产生版本快照
git commit -m "注释说明"
# 查看当前暂存区的文件
git ls-files
- Git文件2种状态
- 未跟踪:新文件,从未被Git管理过
- 已跟踪:Git已经知道和管理的文件
文件状态 | 概念 | 场景 |
---|---|---|
未跟踪(U) | 从未被Git管理过 | 新文件 |
新添加(A) | 第一次被Git暂存 | 之前版本记录无此文件 |
未修改('') | 三个区域统一 | 提交保存后 |
已修改(M) | 工作区内容变化 | 修改了内容产生 |
- 使用:修改文件,暂存,提交保存记录,如此反复操作
- 需求:新增css文件,并使用 git status -s 查看文件状态,并最终提交
# 查看文件状态
git status -s
- 暂存区:暂时存储,可以临时恢复代码内容,与版本库解耦
- 暂存区→覆盖→工作区,命令:git restore 目标文件(注意:完全确认覆盖时使用)
# 把暂存区的文件覆盖回工作区
git restore 目标文件
# 从暂存区移除文件
git rm --cached 目标文件
# 查看提交的记录
git log --oneline
- 概念:把版本库某个版本对应的内容快照,恢复到工作区/暂存区
- 回退命令:
- soft:其他文件未跟踪
- hard:彻底清理
- mixed:与reset等价,覆盖暂存区,保留工作区
- 注意:只有记录在版本库的提交记录才能恢复
- 一般先和暂存区对比,再对比工作区
# 恢复到之前版本
git reset --soft/hard/mixed 版本号
# 查看完整提交记录
git reflog --oneline
- 需求:删除文件,并产生一次版本记录
- 步骤:
- 手动删除工作区文件
- 暂存变更/手动删除暂存区文件造成变更
- 提交保存
- 总结:工作区只要改变,都可以暂存提交产生新纪录
- 概念:.gitignore文件可以让git彻底忽略跟踪指定文件
- 目的:让git仓库更小更快,避免重复无意义的文件管理,例如
- 系统或软件自动生成的文件
- 编译产生的结果文件
- 运行时生辰的日志文件,缓存文件,临时文件等
- 涉密文件,密码,密匙等文件
- 创建:
- 项目根目录新建.gitignore文件
- 填入相应配置来忽略指定文件
- 注意:如果文件已经被暂存区跟踪过,可以从暂存区移除即可
- 概念:本质上是指向提交节点的可变指针,默认名字是 master
- 注意:HEAD指针影响工作区/暂存区的代码状态
- 可能会有多个提交指针(master/main/content),就需要HEAD指向
- 场景:开发新需求/修复Bug,保证主线代码随时可用,多人协同开发提高效率,例如:
- 在现有代码上创建新分支完成内容列表任务
- 突然需要紧急修复Bug-单独创建分支解决Bug
- 步骤
- 创建分支命令,以当前HEAD指针的指向作为起点
- 切换分支命令
- 工作 准备代码并暂存提交,重复3次
# 创建新分支
git branch 分支名
# 切换分支命令
git checkout 分支名
# 创建同时切换
git checkout -b 分支名
# 查看当前工作目录中有哪些分支
git branch
- 需求:把login-bug合并回到master分支并删除login-bug分支
- 步骤:
- 切回到要合入的分支上:git checkout master
- 合并其他分支过来,同时把主分支指向到最后提交的分支上
- 删除合并后的分支指针
# 合并其他分支
git merge 分支名(login-bug)
# 删除合并后的分支指针
git branch -d 分支名(login-bug)
- 合并提交:发生于原分支产生了新的提交记录后,再合并回去时发生,自动使用多个快照记录合并后产生一次新的提交
- 步骤
- 切回到要合入的分支上
- 合并其他分支过来
- 删除合并后的分支
- 注意:提交记录的顺序按照产生的先后顺序排列,而非合并的先后顺序
- 需求
- 基于master新建publish分支,完成发布文章业务,然后修改内容页面的html文件的title标题,并提交一次
- 切换到master,也在修改内容页面的html文件的title标签,并提交一次
- 冲突:把publish分支合并到master回来,产生合并冲突
- 概念:不同分支中,对同一个文件的同意部分修改,git无法干净的合并,产生合并冲突
- 解决
- 打开vs找到冲突文件并手动解决
- 解决后需要提交一次记录
- 避免(多交流)
- 按页面划分不同分支开发
- 公共代码在同一文件夹维护
- Node等软件版本统一,npm包同意下载
- 概念:托管在因特网或者其他网络中的项目版本库
- 作用:保存版本库的历史记录,多人协作
- 创建:公司自己服务器/第三方托管平台(Gitee/GitLab/GitHub)
- 步骤:
- 注册第三方托管平台网站账户
- 新建仓库得到远程仓库Git地址
- 本地Git仓库添加远程仓库原点地址
- 本地Git仓库推送版本记录到远程仓库
# 本地仓库添加远程仓库
git remote add 远程仓库别名(自定义) 远程仓库地址
# 远程仓库信息
git remote -v
# 本地仓库版本推送到远程仓库
git push -u 远程仓库别名 本地:远程分支名(自定义)
# 移除远程仓库
git remote remove 远程仓库别名
- 克隆:拷贝一个Git仓库到本地,进行使用
# 克隆远程仓库
git clone 远程仓库地址
- 效果:在运行命令所在文件夹,生成work项目文件夹(包括版本库,并映射到暂存区和工作区)
- 注意:
- Git本地仓库已经建立好和远程仓库的链接
- 仓库公开随意克隆,推送需要身为仓库团队成员
- 本地开发代码→工作区→暂存区→提交→拉取(可选)→推送
# 拉取合并
git pull origin master
# 等价于
git fetch origin master:master(获取远程分支记录到本地,未合并)
git merge origin/master(把远程分支记录合并到所在分支下)
# 提交推送
git push
- 点击"+"暂存
- 提交并写明修改信息
- 同步到远程分支(自动先拉取再合并)
- 建议修改前先拉取
- 如果存在冲突会提醒并自行做出修改
master org edit