一,Git 常用命令
//设置用户签名和用户邮箱,必须设置,否则无法提交代码
git config --global user.name mlhiter
git config --global user.email 3076438032@qq.com
//我们可以在我们资源管理器的用户文件夹下的.gitconfig文件里看到我们设置的信息
//初始化本地库
//直接在你想要管理的项目根目录下右键打开git bash
git init
//.git文件夹在win下是看不到的,我们要在查看里勾选隐藏项目才能看到
//可以用ll命令查看,不过要加一个-a的参数
//查看git状态
git status
//结果一般是这样
on branch master//,默认分支名是master
no commit //没有提交
vim hello.txt //创建一个文件
//复制快捷键:yy 粘贴快捷键:p
//当然要先退出插入模式,按esc就行
:wq 保存一下
cat hello.txt 查看文件
git add hello.txt //将文件提交到暂存区
git add . //将所有文件都提交到暂存区
git rm --cached 文件名 //将暂存区的文件删除,工作区的文件是不会被删除的
git commit -m"first commit" hello.txt //这里的-m后边引号里的内容是日志信息
//如果我们没有添加-m信息,那就直接:wq回车就好了,但是注意必须要有信息的
git reflog //查看版本信息
git log //查看版本详细信息,比上一个还多了完整版版本号和用户名
文件修改:
vim hello.txt
i 修改内容
:wq保存
版本穿梭:
//得到版本号
git reflog
//代码强行回退到某节点,在当前节点到回溯节点之间的commit内容会全部消失
// 场景:当我们发现某个commit思路不正确或者与业务有很大的出入时可以用
// 回退到某个版本号
git reset --hard 版本号 //如果不加版本号会回退最近的一次
// 这个会保存当前节点和回溯节点之间已经保存的内容
// 场景:当我们把还没有完全添加完毕的功能提交上去之后可以回退我们的误操作,
// 完成功能后再重新提交commit
git reset --soft 版本号 //代码返回到暂存区
git reset --mixed 版本号 //默认就会使用这种方式,代码返回工作区
// 需要再次add和commit
分支操作:
git branch -v //查看分支
git branch other-branch //添加分支
git checkout other-branch //切换分支
git checkout -b other-branch //创建并切换分支
// 注意执行这种融合之类的操作时要把当前分支的git状态清空
git merge other-branch //合并分支,将other-branch合并到当前的分支上
git rebase master // 将主分支代码融合到个人分支上(提前切换到个人分支)
git branch -d 分支名//删除分支,删除前会检查merge状态
git branch -D 分支名//直接删除分支
//如果分支合并发生冲突,则合并之后要修改一下文件内容,把添加的额外字符和重复内容手动删除
//然后要提交暂存区,提交本地库时注意不要加文件名
// 修改分支名
git branch -m oldName newName //还没有推送到远程的时候
// 已经推送到远程了
git branch -m oldName newName //修改远程分支对应的本地分支
git push --delete origin oldName //删除远程分支
git push origin newName //上传新命名的本地分支
git branch --set-upstream-to origin/newName //将修改后的远程分支和本地分支关联
二,GitHub 使用
git remote -v //查看当前远程库别名
//别名最好和库名保持一致,创建远程库别名
git remote add 别名 https://github.com/mlhiter/testbase.git
// 更新远程库地址
git remote set-url 远程库别名(origin) 地址
//将本地代码push到远程库上
git push 别名 分支
git push -u 别名 分支 //加上-u之后推送的话就可以只写git push了,少写几个字母
git push origin master -f //强制推送
//拉取远程库的代码到本地库
git pull git-demo master
git pull --all //拉取所有分支的代码
//拉取远程库新增分支
git branch -r //展示远程库的所有分支
git checkout -b 分支名 origin/分支名 //以线上分支为基础的分支
//克隆远程库代码,不需要登录账号,因为是公开库
git clone 链接
//删除指定的远程仓库
git remote rm 别名
//ssh免密登录
//在window我们自己的用户下使用git创建ssh秘钥
//ssh秘钥存放在.ssh文件夹里
ssh-keygen -t rsa -C 3076438032@qq.com //-C后面的邮箱只是一个标识 -t后面指的是加密算法的选择
//连续敲击三次回车即可
//在github里加上ssh密钥就行
git pull git@github.com:mlhiter/testbase.git master
@@在 vscode 中出现的问题
vscode 中经常 git push 不成功,总是弹出 reset,timeout 等错误,怎么处理
// 第一步:取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
// 第二步:更新DNS
ipconfig /flushdns
// 第三步:设置代理:注意一个非常重要的一点,代理地址要去网络代理找,并不是和这里一样的
git config --global https.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7890
我修改过:git config –global http.sslVerify “false”
上述方法都没用,下面这个有用:
你在 cmd 里面:ping github.com ,如果连接超时
去 C:\Windows\System32\drivers\etc 找 hosts 文件,增加两行内容
192.30.255.112 github.com git
185.31.16.184 github.global.ssl.fastly.net
这个原因是本地 DNS 无法解析导致的,完美解决。
不好用了 ipconfig / flushdns 刷新一下 DNS 就好了。
三,git 中 HTTPS 和 SSH 的区别
git 可以使用的四大传输协议:git 协议(缺乏授权机制而且较难架设故不常用),本地协议,
HTTP 协议,SSH 协议
优缺点比较:
ssh:一般使用 22 端口,速度相对较慢,但是使用公钥和秘钥对的匹配,适合内部项目
克隆和推送都需要建立在已经配置好 ssh key 的前提下,但是这样 push 的时候也不会验证账号密码了
http:一般使用 443 端口,速度相对较快,适合开源项目
可以直接克隆,但是推送需要验证账号密码
四,git 钩子和 lint-staged
git 钩子,类似于前端的 dom 事件,当我们执行对应的操作时会触发它,从而通知订阅该事件的 shell script 文件处理我们要进行的任务
nodejs 包 husky,它会帮我们自动生成.git/hooks 目录下的 shell script,我们便可以很轻松的使用更熟悉的 Nodejs 处理 git hooks 任务,而无需关注 shell script 的实现细节。
npm install husky --save-dev
npx husky add .husky/commit-msg "npx --no-install commitlint --edit "$1""
lint-staged
npm install --save-dev lint-staged
在 package.json 中增加一些配置
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"lint-staged": {
"linters": {
"*.{scss,css}":[
"npm run stylelint:fix",
"git add"
],
"*.vue": [
"npm run stylelint:fix",
"npm run eslint:fix",
"git add"
],
"*.{js}": [
"npm run eslint:fix",
"git add"
]
},
"ignore": [
"**/test/**"
// 你要忽略的其他目录...
]
}