git常用命令
配置
查看全局配置列表
git config -l
查看局部配置列表
git config --local --list
查看已设置的全局用户名/邮箱
git config --global --get user.name
git config --global --get user.email
设置全局用户名/邮箱
git config --global user.name ""
git config --global user.email ""
初始化仓库
git init
克隆
git clone
文件变化
查看从上次提交之后文件状态变化
git status
以短格式给出输出
git status -s
查看已忽略的文件
git status --ignored
查看xxx文件的修改历史记录,包括时间、作者以及内容
git blame xxxx
查看所有文件改动(尚未暂存即没有add的文件)
git diff
查看所有文件改动(已暂存即已经add但没commit的文件)
git diff --cached
查看所有文件改动(已暂存的与未暂存的文件)
git diff HEAD
日志
查看正常历史提交记录
git log
查看所有历史提交记录包括已经被删除的commit记录和reset的操作
git reflog
查看前N次提交记录 commit message
git log -N
查看前N次提交记录,包括diff
git log -p -N
搜索关键词
git log -S xxx
只显示合并日志
git log --merges
以图形查看日志记录, --oneline 可选
git log --graph --oneline
分支
查看所有分支
git branch -a
查看本地分支
git branch
查看远端分支
git branch -r
查看本地分支所关联的远程分支
git branch -vv
# 创建xxx本地分支
git branch xxx
# 创建本地xxx分支并切换
git checkout -b xxx
# 删除本地xxx分支
git branch -d xxx
# 切换到xxx分支
git checkout xxx
git switch xxx
# 切换上一个分支
git checkout -
标签
列出本地所有标签
git tag
列出远程所有标签
git ls-remote --tags origin
按照特定模式查找标签, `*` 模板搜索
git tag -l "v1.0.0*"
创建带有注解的标签
git tag -a v1.1.0
创建轻量标签, 不需要带任何参数
git tag v1.1.0
后期打标签, 假设之前忘记打标签了,可以通过git log查看commit id
git log
git tag -a v1.1.0 <commit_id>
推送到远程,默认只是本地创建
git push origin v1.1.0
一次性推送所有标签到远程
git push origin --tags
删除标签, 你需要再次运行 git push origin v1.1.0 才能删除远程标签
git tag -d v1.1.0
删除远程标签
git push origin --delete v1.1.0
暂存
执行存储时,添加备注,方便查找,只有git stash 也可以的,但查找时不方便识别
git stash save ""
查看stash了哪些存储
git stash list
显示做了哪些改动
git stash show
提交
提交暂存区中所有的文件
git commit -m "changes log"
只提交xxx文件
git commit xxx -m "message"
提交并显示diff变化
git commit -v
重写上一次提交信息,确保当前工作区没有改动
git commit --amend -m "新的提交信息"
将A和B号提交转移当前分支
git cherry-pick <HashA> <HashB>
拉取
从远程仓库下载新分支与数据
git fetch
拉取远程仓库并合并到本地版本,相当于git fetch 然后 git merge
git pull
推送
推送内容到主分支
git push -u origin master
本地分支推送到远程, 本地分支:远程分支
git push origin <branchName>:<branchName>
简写,默认推送当前分支
git push
强制推送, -f 是 --force 缩写
git push -f
回退版本
回退所有内容到上一个版本
git reset HEAD^
回退 hello.php 文件的版本到上一个版本
git reset HEAD^ hello.php
回退到指定版本
git reset 052e
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
git reset --hard HEAD
合并分支(merge rebase)
将 master 分支代码合并到 feature,会在feature分支上自动创建一次新的提交
git checkout feature
git merge master
或者
git merge master feature
将 master 分支代码合并到 feature,会合并之前的提交历史
git checkout feature
git rebase master
HEAD说明
HEAD就是一个特别指针。在 git 中,它是一个指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名。
git 分支管理策略
不同公司会有不同的分支管理策略,简单分享我自己了解的一种策略,从一个产品的开发生命周期可以分为主分支(master分支),开发分支(dev分支),测试分支(test分支),预生产分支(pre分支)
master分支
- 产品唯一主分支
- 记录产品完整开发到部署各个版本
dev分支
- dev分支均由master分支衍生出来,使用tag标定版本号
- 组内开发人员从dev拉取建立自己的开发分支,完成开发后提交并合并到dev主分支
test分支
- test分支由当前dev主分支衍生出来,dev分支每提交一个版本,test分支衍生一次
- 一轮测试结束修复完bug后提交,进行下一轮测试
pre分支
- 每一个版本的预生产pre分支均由当前test分支衍生出来
- 专门用于存放每一个版本正式发布之前,需要再次测试的版本代码
- 预生产环境测试没有bug之后,直接从该分支部署至正式环境,同时将该分支代码合并至master分支上
git hook的使用
git hook
git hook,也就是常说的Git钩子。
和其它版本控制系统一样,Git能在特定的重要动作发生时触发自定义脚本。有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。
- pre-commit:该钩子在键入提交信息前运行。 它用于检查即将提交的快照。如果该钩子以非零值退出,Git 将放弃此次提交,你可以利用该钩子,来检查代码风格是否一致。
- prepare-commit-msg:该钩子在启动提交信息编辑器之前,默认信息被创建之后运行。 它允许你编辑提交者所看到的默认信息。
- commit-msg:该钩子接收一个参数,此参数存有当前提交信息的临时文件的路径。 如果该钩子脚本以非零值退出,Git 将放弃提交,因此,可以用来在提交通过前验证项目状态或提交信息。
- post-commit:该钩子一般用于通知之类的事情。
husky
是常见的git hook工具,使用husky可以挂载Git钩子,当我们本地进行git commit或git push等操作前,能够执行其它一些操作,比如进行ESLint检查,如果不通过,就不允许commit或push。
Lint-staged
Lint-staged可以在git staged阶段的文件上执行Linters,简单说就是当我们运行ESlint或Stylelint命令时,可以通过设置指定只检查我们通过git add添加到暂存区的文件,可以避免我们每次检查都把整个项目的代码都检查一遍,从而提高效率。
配置
"husky": {
"hooks": {
"pre-commit": "lint-staged",
}
},
"lint-staged": {
"*.vue": [
"eslint --fix",
"stylelint --fix",
"git add"
],
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"git add"
],
"*.{htm,html,css,sss,less,scss,sass}": [
"stylelint --fix",
"git add"
]
}