文章推荐
前端-SCMP:技术和业务相辅相成 / 一分钟快速读懂SCMP供应链管理专家_scmp补贴-CSDN博客
------------
一、分支管理
Git在创建分支仅是生成了一个指针又称快照(有的工具则进行了物理拷贝),这样在使用起来就非常的方便。方便的同时问题随之而来,如果不加管理,那么就会到处开枝散叶,完全看不出主干。因此,分支管理的需求应运而生。分支管理从某种角度讲可以看作项目管理,伴随了一个任务的生命周期。
二、如何管理
主分支包括:
master:上生产环境验证后合并到的分支
Git主分支的名字,默认叫做master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。
prd:生产环境分支,提供给用户的正式版本
pre:预发布环境
uat(User Acceptance Test):客户体验环境分支
test:测试环境分支
dev:开发环境分支
发版到对应环境的代码,只能使用对应的主分支,如,test环境使用test分支,包括小程序。
开发主分支:从master创建的开发分支,命名规则:feat-版本号-日期
举例:git checkout -b feat-M.1.0.0-20210911-ljj master
开发分支:从开发主分支创建的分支,命名规则:feat-版本号-日期-姓名拼音
举例:git checkout -b feat-M.1.0.0-20210911-ljj feat-M.1.0.0-20210911
注:开发新任务:feat、修改bug:hotfix
伴随着开发的进度,从开发分支依次向上合并,直到master分支,删除开发分支与开发主分支。
两个任务同时到uat、不同时间发版,这样处理,类似解决bug一样。
三、如何解决开发分支与主干分支的冲突
1、举例开发分支与dev主干分支发生的冲突。
2、首先在dev分支的基础上创建一个临时解决冲突的分支,我们命名为:dev-mid-20210911。
3、在编译器把开发分支合并到临时mid分支,这是冲突的文件与内容在编译器就可以看到了,找到冲突的代码,检查,不能准确处理的,需要与当事人当面一起处理。
4、解决冲突后把dev-mid分支合并到dev分支,删除dev-mid,这样就处理完成了。
四、常用命令
序号 | 命令 | 描述 |
1 | git init | 新建代码库 |
2 | git clone | 克隆项目 |
3.1 | git branch | 列出本地已经存在的分支,并且当前分支会用*标记 |
3.2 | git branch -r | 查看远程版本库的分支列表 |
3.3 | git branch -a | 查看所有分支列表(包括本地和远程,remotes/开头的表示远程分支) |
3.4 | git branch -v | 查看一个分支的最后一次提交 |
3.5 | git branch --merged | 查看哪些分支已经合并到当前分支 |
3.6 | git branch --no-merged | 查看所有未合并工作的分支 |
3.7 | git checkout -b 新分支 | 创建分支的同时,切换到该分支上 |
4.1 | git tag [name] | 创建tag |
4.2 | git tag | 查看已创建的tag |
4.3 | git show tagName | 查看tag对应的commit id |
5 | git reset --hard commit-id (到这里就和reset方法一样了) | 回退代码 |
6 | git submodule add [url] [path] | 添加子模块 |
7.1 | git pull | 更新本地代码 |
7.2 | git fetch | 拉取仓库里有 本地电脑没有的代码 |
7.3 | pull 根据不同的配置,可等于 fetch + merge 或 fetch + rebase | |
8 | git add | 将当前更改加入到索引 |
9 | git commit | 提交当前工作空间的修改内容 |
10 | git commit | 将commit的代码提交的远程仓库 |
11.1 | git reset --hard HEAD^ | 回退到上个版本 |
11.2 | git reset --hard | 本地库、暂存区动、工作区都动 |
11.3 | git reset --mixed | 本地库、暂存区动,工作区不动 |
11.4 | git reset --soft | 本地库动,暂存区、工作区不动 |
11.5 | git reset --hard HEAD~3 | 回退到前3次提交之前 |
12.1 | git push origin HEAD --force | 推送到远程仓库 |
12.2 | git push --set-upstream origin dev | 本地创建了一个名为dev的分支,远程仓库没有这个分支,push |
12.3 | git push --force / git push -f | 强制推送 |
13 | git merge | 合并代码 |
14 | git merge --abort、 git reset --merge | 取消合并过程 |
15.1 | git stash | 将当前分支修改暂存 |
15.2 | git stash list | 查看暂存信息 |
15.3 | git stash apply | 恢复最近一次修改 |
15.4 | git stash apply stash@{2} | 恢复索引 |
16.1 | git config --local remote.origin.url | 查看代码仓库地址 |
16.2 | git config --local remote.origin.url http://www.abc.com/abc.git | 修改代码仓库地址 |
17.1 | git branch -d 分支名称 | 删除本地分支,不能删除当前所在的分支,如果要删除,必须先切换到其他分支上 |
17.2 | git branch -D 分支名称 | 强制删除分支 |
17.3 | git push origin :分支名称 | 删除远程分支,分支名称前有个冒号,分支名前的冒号代表删除 |
18 | git status | 文件、文件夹在工作区、暂存区的状态 |
19 | git log | 查看提交历史 |
20 | git remote -v | 列出所有配置的远程仓库![]() |
举例这些,用到哪些查一下就ok。
五、 commit代码时要根据本次内容不同加上相应的前缀/提交类型
序号 | 提交类型 / type | 解释 |
1 | feat | 新功能(feature) |
2 | fix | 修补bug |
3 | modified | 修补bug |
4 | deleted | 删除文件 |
5 | merge | 代码合并 |
6 | style | 格式 / 样式(不影响代码运行的变动) |
7 | docs | 文档(documentation) |
8 | test | 增加测试 |
9 | perf | 性能优化 |
10 | refactor | 重构(即不是新增功能,也不是修改bug的代码变动) |
11 | build | 建造/打包工具等变动 |
12 | ci | 持续集成相关文件的变动 |
13 | chore | 构建过程或辅助工具的变动 |
14 | revert | 回滚到上一个版本 |
15 | workflow | 工作流相关文件修改 |
16 | types | 类型定义文件更改。如 TypeScript 项目中的 .d.ts 文件 |
17 | wip | 开发中。当功能尚未完全实现,正处于开发过程中时 “Work in Progress” |
六、四个工作区域
1、Workspace: 工作区,就是你平时存放项目代码的地方
2、Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
3、Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
4、Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
七、文件的四种状态
1、Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
2、Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.如果使用git rm移出版本库, 则成为Untracked文件
3、Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git heckout即从库中取出文件, 覆盖当前修改
4、Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified
八、github常见的几个button
github网站中,搜索到一个项目之后,经常会看到的几个按钮。
1、Watch,按钮中有三个选项:
2、Not watching (默认选中):当参与或者被提及到的时候,通知。
3、Watching:所有的更改会话都通知。
4、Ignoring:忽略所有的会话。
5、Star:表示赞,给它一个星星奖励。
6、Fork: 克隆别人的代码库到自己的github项目中,可以作为子模块的形式使用,或二次开发 。
7、Pull requests (PR): Fork之后,如果希望将自己的修改贡献到原始代码中,可以使用pull requests推送请求到原来仓库中,然后,原始代码的作者,根据你提交的内容,考虑是否真的放入源码中。
它的过程是这样的:比如你在GitHub上看到一个很牛X的项目,你fork到自己仓库后,再改动一些代码,然后可以向提交一个pull request。当管理员觉得你的提交太哇噻了,就会点击合并,然后你就给这个项目贡献了代码了。
九、用户信息
9.1、查看git本地用户信息
git config user.name // 获取当前登录的用户
git config user.email // 获取当前登录用户的邮箱
9.2、修改git本地用户信息
git config --global user.name 'userName' // 修改登陆账号
git config --global user.email 'email' // 修改登陆邮箱
git config --global user.password 'password' // 修改登陆密码
十、Git创建分支
10.1、使用 git branch 命令创建分支:
git branch <branch-name>
10.2、使用 git checkout 命令切换并创建分支:
git checkout -b <branch-name>
10.3、使用 git clone 命令克隆代码库并切换到该分支:
git clone -b <branch-name> <repository-url>
10.4、使用 git branch 命令以某个已有的 commit 为基础创建分支:
git branch <branch-name> <commit-hash>
10.5、使用 git checkout 命令以某个已有的 commit 为基础创建分支并切换:
git checkout -b <branch-name> <commit-hash>
10.6、修改分支名
#git branch -m 旧名称 新名称
git branch -m master main
十一、遇到问题
11.1、git: rpc failed; http413 rurl 22requested url returned error 413
文件太大了,有规范的解决方法
临时解决的话可以把要提交的内容分批push
11.2、.gitignore无效,不能过滤某些文件(删除已跟踪的文件)
git rm --cached xxxxxx
【转】Git:移除文件----git rm命令的使用_faithmy509的博客-CSDN博客
11.3、忽略git hooks的校验,直接commit代码
git commit -m "feat: 开方内容" --no-verify
11.4、出现(end)如图,ctrl+c 不能管用,这时可以使用 :q 退出,返回命令行
11.5、本地找不到dev分支 / 某分支
C:\project\abc\.git\refs\remotes\origin 这个目录下,删除dev分支文件,执行gitpull,再次查看出现了
11.6、下载项目失败
解决:
协议://用户名:密码@仓库地址
经测试,下载成功
十二、过程记录
Existing branch name, tag, or commit SHA
12.1、创建分支,可以基于以下几种
12.2、tag
Git基础 - git tag 一文真正的搞懂git标签的使用_NorthCastle的博客-CSDN博客_git tag怎么使用
git tag创建、远程推送、回退以及强推push -f_苦咖啡-coffe的博客-CSDN博客_git tag
12.3、git config --global credential.helper store
12.3.1、gitlab更改账号之后,出现问题如下图
12.3.2、输入 git config --global credential.helper store,出现弹窗,输入用户名,再出现弹窗,输入密码,,测试-成功
12.3.3、理解git config --global credential.helper store
该命令用于设置一个全局的Git凭据(Credential)帮助程序,它可以将凭证信息(如用户名和密码)保存在本地硬盘上,以便下次访问Git仓库时自动获取凭据,而不需要每次都输入用户名和密码。具体来说,它将凭据存储在 ~/.git-credentials 文件中。
12.4、OpenSSL ssL_read: Connection was aborted,errno 10053 报错
OpenSSL ssL_read: Connection was aborted,errno 10053 报错_dccose的博客-CSDN博客
12.5、git分支命名推荐使用中文吗,会有哪些问题
不推荐使用中文作为git分支名。
虽然git支持使用中文作为分支名,但这可能会引起一些问题:
1、如编码问题;可读性问题;
2、不同操作系统对于中文字符的处理方式不同,可能会导致Git在某些情况下无法正常工作;
3、中文字符可能会导致一些问题,比如特殊字符可能会引起解析错误;
4、在多人协作的项目中,使用中文分支名称容易造成沟通不畅,特别是在团队成员中有不同语言背景的情况下;
5、对命令行操作、自动化脚本都不友好;
建议使用英文字母、数字、短横线、下划线等简单的字符作为分支名,以便其他人也能够轻松理解和使用。如果英文不好,可以使用翻译工具,也可以使用拼音。
12.6、git安装教程
git:安装 / 设置环境变量 / 使用_git 环境变量-CSDN博客
12.7、阿里镜像
12.8、Delete source branch when merge request is accepted
settings - merge requests
取消勾选
保存
测试,再次合并,已不再默认选中了
12.9、新项目push代码失败 error: failed to push some refs to ...
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'http://a.b.coam/a-b-c/m-basic-vue3-pc.git'
解决:
settings--repository--protected branches--虽然此时没有分支/新的项目,依然可以设置
设置好之后,代码可以push成功了。
12.10、error: bad signature 0x00000000 fatal: index file corrupt
解决
【git commit错误】error: bad signature 0x00000000 fatal: index file corrupt原因分析及解决方案-CSDN博客
12.11、电脑突然自己蓝屏,本地工作区有没有提交的代码,重启电脑后git报错如图
解决:
方法一、
1、备份没有提交的代码
2、移除损坏的索引文件
rm -f .git/index
git reset
3、检查工作目录
git status
方法二、重新克隆仓库
十三、欢迎交流指正,关注我,一起学习
十四、参考连接
vue3+ts:约定式提交(git husky + gitHooks)_snow@li的博客-CSDN博客
前端CICD:VMware(centos8stream)部署gitlab_snow@li的博客-CSDN博客
git:.gitkeep_.gitkeep 怎么看到_snow@li的博客-CSDN博客
gitlab删除项目_gitlab delete project_snow@li的博客-CSDN博客
步骤记录:git上传项目_snow@li的博客-CSDN博客
GitHub创建分支_github怎么创建分支_snow@li的博客-CSDN博客
git: 修改gitlab仓库提交地址_git修改提交地址_snow@li的博客-CSDN博客
gitHooks: commit-msg_snow@li的博客-CSDN博客
【马士兵】起步的Git入门详细教学,真的简单_哔哩哔哩_bilibili