实际项目中一般使用到的git知识
1.项目上线分支管理流程
图片压缩太厉害有些模糊 700k 压缩到20多k
清晰些的图片地址https://project.zdzspace.cn/test-vuekey
2.一些常用的git命令
- git fetch 拉取远程仓库最新代码 但是不合并到本地分支
- git merge feature-a 用于合并本地分支feature-a到当前分支
常用
- gti pull origin feature-a 合并远程仓库分支feature-a到当前分支(未上线前所有分支统一可以直接通过这种方式本地解决冲突再push到远程) (仓库名origin 如果有多个仓库origin 要换成对应的仓库)
常用
- git pull 拉取原型仓库 当前分支的最新代码 (常用)
- git push 推送当前分支到远程仓库,如果未发布则会进行分支发布
- git push -f 强制推送至远程仓库(会覆盖远程代码与本地当前代码一致)
慎用 自己分支只有自己使用可以根据需求强推,如果是别人的分支,要确保不会覆盖别人提交的代码
,只有当自己本地的分支提交错误(例如提交信息想修改,或者有的文件不想提交)会撤销上次提交然后重新提交,覆盖远程记录 - git cherry-pick 对应提交的hash值,可以合并指定提交代码到当前分支,一般未某个分支想要弃用但是想保留里面部分代码或者上线功能临时只想要其中部分功能(使用较少)
- git reset --soft HEAD^ 用于撤销上一次提交文件会重新变为变更待提交状态 我一般使用vscode中的可视化进行操作撤销上次提交
- git revert hash值 撤销指定提交,它相当于手动
假设a版本内容为 a1,提交b版本为a2, revert b 版本会新增一次提交 将a2改为a1,也就是说他相当于手动去还原代码,会存在代码提交记录,而git reset --soft HEAD^ 会把b版本的记录删除掉
3.冲突
之所以出现冲突,是因为两个人同时修改了同一个文件的同一个地方
比如 文件a.text 内容为a A成员修改内容为a1 B成员修改内容为a2,A与B都提交了pr/mr(pull request(git huv)/merge request (git lab等)合并请求)
如果先合并了A 则B的代码此时就是冲突的,如果县合并了B则A就是冲突的
冲突是因为 对于内容a 分别由两个修改版本 一个为a1 一个为a2,而在提交记录中a1与a2的修改都是基于a来的,因此对于git系统来说,他不能确定采用a1还是a2是对的,因此会产生冲突,交由开发人员来决定采用那个版本
- 解决流程
- 如果所有代码未上线,dev,sit,master代码一致,可以直接git pull origin dev(假设dev冲突) 直接在本地合并完成 然后push到远程就可以继续合并B的代码了
- 或者从dev拉取一个conflict解决分支,本地切换到conflict分支,直接merge B的代码,本地解决完冲突,然后推送到远程.取消原来的合并请求,用这个conflict分支合并到dev(
当代码上线之后就只能采用这种方式,不能直接merge dev或者sit代码了,因为这样会导致不需要上线或者未完成的功能混杂到当前分支
)