欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Git学习小结

程序员文章站 2024-03-21 23:18:46
...

Git

1.git工作流程
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>)
相关标签: tools