git的简单使用分享

352 阅读6分钟

109a5df748bb7db5f3fd8f6c32decebd.jpeg

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

305877-c4ddfcf679821e2f.png

 将 master 分支代码合并到 feature,会合并之前的提交历史
git checkout feature
git rebase master

305877-467ba180733adca1.png

HEAD说明

HEAD就是一个特别指针。在 git 中,它是一个指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名。

20190630202304939.png

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"
  ]
}

参考资料:

  1. www.runoob.com/git/git-tut…
  2. www.jianshu.com/p/f23f72251…
  3. www.yht7.com/news/161464