Git学习小结
程序员文章站
2024-03-21 23:18:46
...
Git
1.git工作流程
- Workspace: 工作区
- Index | Stage: 暂存区
- Repository: 本地仓库
- Remote: 远程仓库
2.git常用命令
git --version
git init //初始化仓库
git status //查看文件状态
git add 文件列表 // 追踪文件
git commit -m 提交信息 //向仓库中提交代码
git log //查看提交记录
git checkout 文件名 //用暂存区中的文件覆盖工作目录中的文件
git rm --cached 文件 //将文件从暂存区中删除
git reset --hard commitID //将git仓库中指定的更新记录恢复出来,并覆盖暂存区和工作目录
git reset --hard HEAD~1 //回退1个版本 或者写成HEAD^
git branch //查看分支
git branch 分支名称 //创建分支
git checkout 分支名称 //切换分支 需要暂存区干净
git merge 来源分支 //合并分支
git branch -d 分支名称 //删除分支(分支被合并后才能删除) -D强制删除
git remote add 远程仓库地址别名 远程仓库地址 //创建远程仓库别名,一般用origin
git push 远程仓库地址/别名 分支名称
git push -u 远程仓库地址/别名 分支名称 //-u是记住推送地址及分支 下次只要输入git push即可
git clone 仓库地址
git pull 远程仓库地址 分支名称
生成秘钥 $ ssh-****** -t rsa -C "自己的邮箱地址"
秘钥存储目录 c:\Users\用户\.shh
公钥名称 id_rsa.pub
私钥名称 id_rsa
3.git使用技巧
修改最近一次commit的代码?
git add 修改文件
git commit --amend
// 会对最新一条commit进行修正,会把当前commit里的内容和暂存区里的内容合并起来后创建一个新的commit,用这个新的commit把当前commit替换掉
// 然后Git会进入提交信息编辑界面,然后可以删除之前的changeId,并且修改或者保留之前的提交信息,:wq 保存按下回车后,commit就被更新了
修改最近一次commit的提交信息?
git commit --amend -m "新的提交信息"
最近一次commit漏掉了一个文件?
git add 漏掉的文件
git commit --amend --no-edit
上一次commit的代码太烂,要丢弃掉
git reset --hard HEAD^
代码已经push,发现有问题(还在其他分支)
// 修改了本地的commits再push会失败
git push origin branch名称 -f // -f表示忽略冲突,强制push
代码已经push,发现有问题(已经到了master分支)
git revert HEAD^
//增加一条新的commit,它的内容和倒数第二个commit是相反的,从而相互抵消,达到撤销的效果
//revert和reset最主要的区别是,改动只是被反转了,没有在历史中消失掉,历史中会存在两条commit,一个原始 commit,一个它的反转
git暂缓
git stash // 添加缓存栈
git stash list // 查看缓存栈
git stash pop // 推出缓存栈
git stash apply aaa@qq.com{1} // 取出特定缓存内容
// 注意没有被add的文件不会被暂缓,要通过以下命令,include untracked
git stash -u
git分支
git clone -b 分支名称 地址
git branch // 查看当前分支
git branch -a //查看远程分支
git checkout -b 分支名称 //创建并切换到新命名的分支
git checkout 分支名称
git branch -vv // 查看本地分支与远程分支的关联关系
本地分支关联远程分支
git push origin 分支名称
git branch --set-upstream-to=origin/add_orderdesc
git branch -vv // 查看本地分支与远程分支的关联关系
用户名和邮箱相关
git config user.name // 查看git当前配置用户名
git config user.email // 查看git当前配置的邮箱
git config user.name 名称 // 设置用户名
git config user.email 邮箱 // 设置git邮箱
// 全局命令设置
git config --global user.name 你的目标用户名;
git config --global user.email 你的目标邮箱名;
// 在项目中查看
vi ~/.gitconfig
4.git提交规范
每次提交必须写commit message,一行不够写的话,直接git commit跳出文本编辑器写
格式化的Commit message好处:
1.查看历史提交信息
git log <last tag> HEAD --pretty=format:%s // 显示上次发布后的变动
2.过滤信息,便于查找
git log <last release> HEAD --grep feature // 显示本次发布新增加的功能
3.方便生成change log
规范格式
任何一行都不超过72字符或100字符,为了避免自动换行影响美观
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
1.Header(必需)
包含三个字段:type(必需)、scope(可选)和subject(必需)
-----------------type-------------------------
# 主要type
feat: 增加新功能
fix: 修复bug
# 特殊type
docs: 只改动了文档相关的内容
style: 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
build: 构造工具的或者外部依赖的改动,例如webpack,npm
refactor: 代码重构时使用
revert: 执行git revert打印的message
# 暂不使用type
test: 添加测试或者修改现有测试
perf: 提高性能的改动
ci: 与CI(持续集成服务)有关的改动
chore: 不修改src或者test的其余修改,例如构建过程或辅助工具的变动
!!!注意:type为feat和fix的时候,则该commit将要出现在Change log之中
-----------------scope-------------------------
用于说明commit影响的范围
-----------------subject-------------------------
commit 目的的简短描述,不超过50个字符
以动词开头,使用第一人称现在时,比如change,而不是changed或changes
第一个字母小写
结尾不加句号(.)
2.Body
Body部分是对本次 commit 的详细描述,可以分成多行
1)使用第一人称现在时
2)说明代码变动的动机,以及与之间行为的对比
3.Footer
1)不兼容变动
与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法
2)关闭 Issue
Closes #123, #245, #992
4.特殊的Revert
当前commit用于撤销以前的commit,则必须revert:开头,后面跟着被撤销Commit的Header
This reverts commit hash值(被撤销的)
commitizen&cz-conventional-changelog
//全局安装
npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
使用git cz取代git commit,后面跟的其他命令可以不变
//项目内安装
npm i -D husky @commitlint/config-conventional @commitlint/cli
//创建commitlint.config.js
module.exports = {extends: ["@commitlint/config-conventional"]};
//引入husky,package.json中写
"husky": {
"hooks": {
"commit-msg": "commitlint -e $GIT_PARAMS"
}
}
// 使用
git cz
1.Select the type of change that you're committing 选择改动类型 (<type>)
2.What is the scope of this change (e.g. component or file name)? 填写改动范围 (<scope>)
3.Write a short, imperative tense description of the change: 写一个精简的描述 (<subject>)
4.Provide a longer description of the change: 对于改动写一段长描述(<body>)
5.Are there any breaking changes? (y/n) 是破坏性修改吗?默认n (<footer>)
6.Does this change affect any openreve issues? (y/n) 改动修复了哪个问题?默认n (<footer>)
上一篇: postman接口测试六
下一篇: OpenCV--图像边界填充