概念
在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
安装配置
1. 安装
Git 各平台安装包下载地址为:http://git-scm.com/downloads
2. 配置
// 配置个人的用户名称和电子邮件地址:git config --global user.name "zhongtingneng"git config --global user.email 2213502797@runoob.com
查看git配置信息
git config --list
注意
- 如果要对配置信息进行修改,重复上述命令即可
-
仓库说明文档
-
忽略清单
将不需要被 git 管理的文件名字添加到此文件中,在执行 git 命令的时候,git 就会忽略这些文件。
- .gitignore
- 例子:
提交步骤
```git // 初始化仓库 git init
// 查看文件状态 // git 不会记录你的空文件夹 git status
// 添加文件到仓库 git add 文件列表
// 提交暂存区到本地仓库 git commit -m 提交信息
// 查看提交记录 git log
<a name="IDKFC"></a># 基本操作<a name="C5E08"></a>## 创建仓库命令```git// 初始化仓库git init// 拷贝一份远程仓库,也就是下载一个项目。git clone '项目地址'
提交与修改
// 添加文件到暂存区git add 文件名 文件名 ...// 将工作目录中的文件全部添加到暂存区git add .// 提交暂存区到本地仓库(当前分支)git commit -m 提交信息git commit -am 提交信息 (add+commit)// 查看仓库当前的状态,显示有变更的文件git status// 比较文件的不同,即暂存区和工作区的差异git diff HEAD -- 文件名// 删除工作区文件(从版本库中删除该文件,那就用命令 git rm 删掉,并且 git commit )git rm 文件名
提交日志
// 查看历史提交记录git log// 记录每一次命令git reflog
Git 标签
git tag -a v1.0
撤销
// 用暂存区中的文件覆盖工作目录中的文件git checkout 文件// 丢弃工作区的修改(让这个文件回到最近一次git commit或git add时的状态)git checkout -- 文件名// 将 git 仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录// 回退版本(不推荐使用:会覆盖以前的提交记录)git reset// 直接回到上一个版本// 有几个 ^ 就是回退几个版本(不会删掉修改代码)git reset --hard HEAD^// 回到指定的版本git reset --hard commitID// 撤销指定的提交(推荐使用:不会覆盖以前的提交记录)git revert <commitID>
远程操作
// 查看远程库git remote// 更详细的信息(抓取和推送的origin的地址。没有推送权限,就看不到push的地址。)git remote -v// 从远程获取代码库git fetch// 下载远程代码并合并git pull 远程仓库地址 分支名称// 将远程主机 origin 的 dev 分支拉取过来,与本地的 dev 分支合并。git pull origin dev:dev// 上传远程代码并合并git push 远程仓库地址 分支名称git push 远程仓库地址别名 分支名称/*强制覆盖(不推荐使用)*/git push --force origin master// 如:git remote add origin起其它名字也可以 远程仓库的地址git remote add 远程仓库地址别名 远程仓库地址// 修改远程厂库地址git remote set-url origin [url]// 删除远程仓库git remote rm [别名]
分支管理
分支细分
- 主分支(master)
第一次向 git 仓库中提交更新记录时自动产生的一个分支
- 开发分支(develop)
作为开发的分支,基于 master 分支创建。
- 功能分支(feature)
分支命令
// 查看分支git branch// 创建并且切换到dev分支git checkout -b devgit switch -c dev(新版git可以使用)// 创建分支git branch 分支名称// 切换分支git checkout 分支名称git checkout --filegit switch 分支名称(新版git可以使用)// 最新版本的Git提供了新的方法// 创建并且切换到dev分支git switch -c dev// 合并分支git merge 来源分支// 复制特定的提交到当前分支(提交的多个功能中,某些情况不需要全部合并,这个时候就使用cherry-pick)git cherry-pick 4c805e2// 删除分支(分支被合并后才允许删除)-D 强制删除git branch -d 分支名称// 查看分支合并图git log --graph
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
暂时保存更改
- 在 git 中,可以暂时提取分支上所有的改动并存储,让开发人员得到一个干净的工作副本,临时转向其他工作。
- 使用场景:分支临时切换 ```git // 存储临时改动 git stash
// 查看临时改动 git stash list
// 恢复 git stash apply
// 恢复的同时把stash内容删除 git stash pop
<a name="SLmB2"></a>## 分支规范| **分支类型** | **用途** | **数量** | **命名规范** || --- | --- | --- | --- || feature | 业务/技术 需求功能开发 | N | feature/{版本}_{需求}_{姓名} || release | 用于集成环境测试、ST环境测试、灰度发布。release分支只有一个,少数场景下需要并行的版本,可以单独再拉一条。 | 1 | release || master | 用于发布,打tag | 1 | master || hotfix | 用于解决线上问题,开发测试阶段的bugfix请在各自的feature分支上改代码 | N | hotfix/{描述}_{姓名} |<a name="pBC9X"></a># GIT提交规范<a name="bP900"></a>## 背景一方面是客户要求,另一方面通过规范的提交记录可以更方便查找问题,同时 `feat` 与 `fix` 类型的提交可以<br />自动生成 `change log`。<a name="j9tFR"></a>## git message 书写规则在使用 `git commit -m` 时需要遵守以下格式:```shell# 格式一:git commit -m '$type: 提交信息'# 例如:git commit -m 'feat: 新增评论组件'git commit -m 'fix: 评论接口未做错误处理'git commit -m 'docs: git 提交说明文档'git commit -m 'style: 某某配置 json 文件格式化'git commit -m 'refactor: 某某文件 Promise 改写为 async await 形式'git commit -m 'test: 增加 getQuery 函数的单元测试'git commit -m 'chore: 持续集成流水线新增 lint 步骤'
git 提交类型
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style:格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
