常用分支命名
主分⽀(master)
主分⽀上包含线上正在运⾏的代码,可以被视为稳定的分⽀,⼀般不允许直接往master分⽀提交代码,
只允许往这个分⽀发起merge request,只允许release分⽀和hotfix分⽀进⾏合流。
体验分⽀(release)
release分⽀从develop分⽀拉取,⽤于回归测试,完成后打tag并合⼊master和develop。
开发分⽀(develop)
开发分⽀是基于主分⽀创建的分⽀,主要⽤户提交我们⽇常开发。
临时分⽀(feature/功能、bugfix/功能)
临时分⽀
是基于develop或者master分⽀创建的,在使⽤完成后可直接delete的分⽀
特性分⽀(feature)
特性分⽀是基于开发分⽀(develop)创建的开发分⽀,主要⽤于完成某个功能模块的开发,开发完成 后再次并⼊develop。
例如开发资讯功能,新建分⽀为: feature/information
修补Bug分⽀ 修补Bug分⽀是基于master创建的临时分⽀,主要⽤于修改线上的Bug,并要及时上 线。bugfix分⽀测试通过后直接并⼊master分⽀。然后develop分⽀同步master分⽀代码,其他 特性分⽀同步develop分⽀代码
通过了解以上内容,对git有一个初步的认识。
至于一些git提交规范其实网上已经有很多了,这里举两个比较常用的:
feat:新功能或功能变更相关
fix:修复bug相关
当然你也可以使用husk来校验git commit 的规范,这里不作重点叙述,请自行官方文档
应用场景及常见问题
S:当正在dev分⽀上开发某个项⽬,这时项⽬中出现⼀个bug,需要紧急修复,但是正在开发的内容只是完成⼀半,还不想提交(假设你的栈中只有一个stash)
A:使用git stash 或 git stash save '暂存说明' 将其暂存至栈中,然后切换分支修复完你的bug之后,再切回你原来的dev分支,使用git stash list查看暂存记录,再使用git stash pop 出栈即可
S:接上若你的栈中不只一个stash,比如有两个,你想应用第二个
A:git stash apply默认是使用第一个存储,即stash@{0},如要使用其他记录使用git stash apply stash@{$num},此场景下应为git stash apply stash@{1}
额外拓展 stash 用法大全
git stash save "save message" 执⾏存储时,添加备注,⽅便查找,只有git stash 也要可以的,但查找时不⽅便识别。
git stash list
查看stash了哪些存储
git stash show
显示做了哪些改动,默认show第⼀个存储,如果要显示其他存贮,后⾯加stash@{$num},⽐如第 ⼆个 git stash show stash@{1}
git stash show -p
显示第⼀个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} - p ,⽐如第⼆个:git stash show stash@{1} -p
git stash apply
应⽤某个存储,但不会把存储从存储列表中删除,默认使⽤第⼀个存储,即stash@{0},如果要使⽤ 其他个,git stash apply stash@{$num} , ⽐如第⼆个:git stash apply stash@{1}
git stash pop
命令恢复之前缓存的⼯作⽬录,将缓存堆栈中的对应stash删除,并将对应修改应⽤到当前的⼯作 ⽬录下,默认为第⼀个stash,即stash@{0},如果要应⽤并删除其他stash,命令:git stash pop stash@{$num} ,⽐如应⽤并删除第⼆个:git stash pop stash@{1}
git stash drop stash@{$num}
丢弃stash@{$num}存储,从列表中删除这个存储
git stash clear
删除所有缓存的stash
S:当你将你的功能分支合并到dev分支时,冲突文件过多,短时间内你又无法处理
A:先使用git log查询你上一次提交的记录的hash值
image.png
使用git reset --hard hash将本地回滚到上次提交的状态。
如果不小心提交了,则使用 git push -f 强推代码覆盖你的上一次push。
S:当你想让git的提交历史记录更加清晰明了如下图
image.png
A:
需要使用变基操作
先将你的代码提交到本地(比如dev分支)git commit -m 'xxx'。
(切换至你要变基的分支(比如master)git checkout master 然后拉取(git pull)master最新代码,最后再切回dev分支进行变基(git rebase master))或 (直接变基到远程master分支(其实就是最新的master)git rebase origin/master),然后git pull,这时候你的dev分支就会是master的最新分支。
之后切回master分支,将dev代码合到master里,整个历史记录就会程线性,不会有交叉的痕迹,并且你新提交的代码是在最前面。
S:接着上面,git pull其实是默认使用git fetch + git merge去合并代码的,为了使记录更清晰,怎么破
A:全局修改git pull即可
git config --global --add pull.rebase true
或你只想在当前项目rebase
git config --local --add pull.rebase true
S:继续,若rebase时候有冲突了,怎么办
A:两个选择合并或放弃
先说合并冲突:
在你解决完冲突后先add冲突文件然后使用 git rebase --continue
这时候会进入vim编辑模式查看你的一些提交啥的,一般这里不需要修改什么,直接输入:wq保存退出即可。
放弃直接执行 git rebase --abort即可
S:我想提交指定文件(比如dev分支的dist下的文件)到指定分支(比如beta分支)
A:在dev分支执行git subtree push --prefix=dist origin beta
preifx='指定的文件夹' '分支名'
S:要基于tag拉取一个分支修复bug
A:
先使用git fetch origin 来获取远程更新
然后使用git branch <newbranch> <tag> 基于tag拉取分支
git checkout newbranch
修复完bug之后git push origin newbranch 提交到远程
S:GitHub拉取速度过慢怎么办
A:git config --local http.proxy 127.0.0.1:'port' IP地址一般是你自己的本地代理
S:拉取项目报错SSL certificate problem: certificate has expired
A:最快的解决方法就是关掉SSL验证,git config --global http.sslVerify false
S:在全局新增或删除一个配置项
A:
新增一项:
git config --local/--global/--system --add section.key value (默认是添加在local配置中)
删除一项:
git config --local/--global/--system --unset section.key
local(本仓库)、global(全局)、system(系统)
也可以手动编辑 git config --local/--global/--system -e/-edit