git
首先要了解git整个流程的一个分类:
- workspace:工作区
- staging area:暂存区/缓存区
- local repository:版本库或本地仓库
- remote repository:远程仓库
创建仓库
git clone [email protected]//拷贝一份远程仓库
git init //初始化仓库
提交流程
git add . //当前目录下的所有文件添加到暂存区
git commit -m [message] //提交暂存区到本地仓库,[message] 可以是一些备注信息
git push //将本地仓库中的代码上传至远程仓库
修改
git fetch //是从远程获取最新版本到本地,不会自动merge
git pull //是从远程获取最新版本到本地,并自动merge
Git 分支管理
git branch //列出本地分支
git branch -r //列出远程分支
git branch 【branchname】 //创建branchname分支
git checkout 【branchname】 //切换到branchname分支
git merge 【branchname】 //合并branchname分支
附上一张常用的git命令图示
git学习网址:Simple Git tutorial for beginners | Nulab
Git 分支管理 冲突
冲突的产生:所谓冲突就是两个开发者对同一个文件同一个位置做出了不同内容的修改,因此就产生了冲突
一般冲突的产生发生在两个分支进行合并时或者是从远程仓库拉取代码到本地时
列举例子:假设我们有两个分支,第一个分支是 master 分支,第二个是名为 border,都修改README.md 文件,然后提交,现在站在 master 分支上合并 border 分支, 就会发生代码冲突
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
<<<<<<< border
This is conflicting branch line.
=======
Upwork projects
>>>>>>> master
我们保留其中一边,或者删除一边然后进行修改提交即可
git使用commit失误了,如何取消
- git log 查看Git的提交记录
- 想撤回某一次提交,可以使用 git revert <commit-hash>
其中,<commit-hash>
是你需要撤销的那次提交的哈希值(通过git log
命令查看)。并将更改回退到暂存区,之后你可以重新修改代码并再次提交
git切换提交的远程代码库
- 查看当前的远程仓库配置信息 git remote -v
- 移除旧的远程仓库配置 git remote remove <remote-name>
<remote-name>
是需要移除的远程仓库的名称
- 添加新的远程仓库配置 git remote add <remote-name> <repository-url>
其中 <remote-name>
是新远程仓库的名称,<repository-url>
是新远程仓库的URL。
- 推送代码到新的远程仓库 git push -u <remote-name> <branch-name>
remote-name
是远程仓库的名称,比如 origin
。
branch-name
是要推送的本地分支的名称,比如 master
。
使用 -u
参数(也可以写成 --set-upstream
)确保本地分支和远程分支建立“联系”,并且在以后的操作中,不需要再次指定远程仓库和分支名称。如果没有使用 -u
参数,在以后的操作中则需要手动指定远程仓库和分支名称。
Commitizen规范git提交
首先全局安装Commitizen,运行:
npm install -g commitizen
然后在项目中开启终端,安装cz-customizable
npm i cz-customizable --save-dev
然后在package.json中配置如下代码:
"config": {
"commitizen": {
"path": "node_modules/cz-customizable"
}
}
然后在根目录中新建.cz-config.js文件,进行如下配置:
module.exports = {
// 可选类型
types: [
{ value: "feat", name: "feat: 新功能" },
{ value: "fix", name: "fix: 修复" },
{ value: "docs", name: "docs: 文档变更" },
{ value: "style", name: "style: 代码格式(不影响代码运行的变动)" },
{
value: "refactor",
name: "refactor: 重构(既不是增加feature,也不是修复bug)",
},
{ value: "perf", name: "perf: 性能优化" },
{ value: "test", name: "test: 增加测试" },
{ value: "chore", name: "chore: 构建过程或辅助工具的变动" },
{ value: "revert", name: "revert: 回退" },
{ value: "build", name: "build: 打包" },
],
// 消息步骤
messages: {
type: "请选择提交类型:",
customScope: "请输入修改范围(可选):",
subject: "请简要描述提交(必填):",
body: "请输入详细描述(可选):",
footer: "请输入要关闭的issue(可选):",
confirmCommit: "确认使用以上信息提交?(y/n/e/h)",
},
// 跳过问题
skipQuestions: ["body", "footer"],
// subject文字长度默认是72
subjectLimit: 72,
};
然后我们就来git提交下:
- git add .
- git cz => 使用 `git cz` 代替 `git commit`,即可看到提示内容
- git push
扩展:设置强制性Commitizen规范提交,否则拦截报错
使用 husky + commitlint 检查提交描述是否符合规范要求
项目控制台安装依赖:
npm install --save-dev @commitlint/config-conventional @commitlint/cli
运行:根目录创建commitlint.config.js,并设置进行配置
module.exports = {
// 继承的规则
extends: ['@commitlint/config-conventional'],
// 定义规则类型
rules: {
// type 类型定义,表示 git 提交的 type 必须在以下类型范围内
'type-enum': [
2,
'always',
[
'feat', // 新功能 feature
'fix', // 修复 bug
'docs', // 文档注释
'style', // 代码格式(不影响代码运行的变动)
'refactor', // 重构(既不增加新功能,也不是修复bug)
'perf', // 性能优化
'test', // 增加测试
'chore', // 构建过程或辅助工具的变动
'revert', // 回退
'build' // 打包
]
],
// subject 大小写不做校验
'subject-case': [0]
}
}
再次安装依赖:
npm install husky --save-dev
运行:会自动生成一个`.husky` 文件夹
npx husky install
然后再运行:会在package.json中生成 `prepare` 指令
npm set-script prepare "husky install"
接着依次运行:
npm run prepare
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
就成了,我们现在来测试一下:
- git add .
- git commit -m "测试"
- git cz
- git push