一、git 分支命名规范
(1)master 主分支
用于部署生产环境的分支,一般由develop以及hotfix分支合并,多人开发不推荐你直接修改master分支。
(2)develop 开发分支
一般开发的新功能时,feature分支都是基于develop分支下创建的,需要始终保持最新完成以及bug修复后的代码。
(3)feature 分支(一般简写为feat)
开发新功能时,以develop为基础创建feature分支。 分支命名: feature/ 开头的为特性分支, 命名规则: feature/user_header、 feature/user_footer。 实际多人开发的时候,会使用feat/你的工作名称_模块_功能_时间,如feat_zhagnsan_shop_detail_0101(说明:张三在1月1日添加了商品详情的功能)
(4)hotfix 分支(一般简写为fix)
分支命名: hotfix/ 开头的为修复分支,命名规则与 feature 分支类似。 线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。
(5)release分支
release 为预上线分支,发布提测阶段,会release分支代码为基准提测。
当然了,一般大型项目,你是没有直接合并到master的权限的。一个上线的项目在正规公司里,无论是添加功能还是修改bug,都会有请求合并的请求,然后需要你的上级review一下代码,确认无误后才会上线的。
二、基本开发
git add . // 将开发的内容暂存
git commit -m 'feat: add shop detail' // 将暂存区内容添加到本地仓库中
git push origin 分支名 // 提交本地代码到指定分支
git pull origin 分支名 // 拉取指定分支代码到本地
三、git commit详细说明
语法:git commit -m ['Type: message']
Type的类别说明: feat: 添加新特性 fix: 修复bug docs: 仅仅修改了文档 style: 仅仅修改了空格、格式缩进、都好等等,不改变代码逻辑 refactor: 代码重构,没有加新功能或者修复bug perf: 增加代码进行性能测试 test: 增加测试用例 chore: 改变构建流程、或者增加依赖库、工具等
四、.gitignore的配置规则(允许使用正则)
作用:.gitignore文件可以让git提交的时候,过滤一些不需要提交的文件或文件夹,比如打包的文件、依赖安装包、编辑器的配置等。
具体的过滤规则有: /build/ 不提交整个文件夹 *.zip 过滤所有.zip文件 /docs/do.txt 过滤某个具体文件 !src/ 不过滤该文件夹
具体语法: 以斜杠/开头表示目录; 以星号*通配多个字符; 以问号?通配单个字符 以方括号[]包含单个字符的匹配列表; 以叹号!表示不忽略(跟踪)匹配到的文件或目录; 从上到下执行,下面的命令会覆盖前面的
五、git 删除分支和删除远程分支
分支名为test
git branch -D test // 删除本地分支,直接删除
git push origin -d test // 删除远程分支
git remote prune origin // 清理本地不存在的远程分支,如远程上没有test分支,但你本地有
六、查看分支 (git branch)
git branch // 查看本地分支
git branch -a // 查看所有分支(包括删除了的分支)
七、合并分支
场景:假设在同一节点”c“下有两个分支c1和c2,这两个分支都是从节点c创建的新分支,由两个人修改不同bug而创建的。 注意:c1合并到c2 / c2合并到c1。 首先c1合并到c2和c2合并到c1其实最终的结果是一样的,区别就是解决冲突的时候
传入的代码和当前代码不同而已。
以c1合并到c2为例 (1)切换分支到c2(合并到那个,在那个分支下操作)。
git checkout c2
(2)如果是多人开发,请先拉取最新代码,如果不是请忽略这步。
git pull origin c2
(3)合并分支c1到c2
git merge c1 // 因为合并的是c1到c2,所以在c2分支下合并c1(应该能理解吧)
(4)解决冲突 在vscode上面将冲突的代码处理后,提交到远程仓库
git add .
git commit -m 'feat: 解决冲突'
git push origin c2
(5)校验 ①:再次使用合并分支的命令 git merge c1 // 显示 Already up to date. 就合并成功了
八、回退代码
0:如何查看commit 节点id
1:Git Bash Here 上查看
使用 git log命令即可,下面红框就是commit节点id,按住下箭头可以看之前版本的提交记录,按q关闭。
(2)github上查看
找到你项目后,点击code下面的提交commits,点击你需要版本右边的复制即可获取对应版本的commit节点id。
(1)语法
git reset commit节点id
git reset --hard commit节点id
(2)语法参数hard分析
(1)加–hard时:将本地的HEAD指针指向了<commit节点id>的版本,并重置了暂存区的内容,而且还修改重置了本地工作区的内容。 (2)不加hard时:只执行git reset <commit节点id>,只是将git仓库中的节点进行了回退,将HEAD指向了<commit节点id>的版本,此时主要用于自己代码的增量提交等。
(3)使用
3-1 回退到当前版本之前
git reset --hard HEAD^
解释:
HEAD^ 表示回退到上一个版本,HEAD^^表示回退到上上个版本,如果回退到100个 版本 ,我们直接简写为 git reset –-hard HEAD~100 。
3-2 回退到当前版本之后,回退指定版本
git reset --hard commit节点id
注意commit 节点id不错即可。
九、当前分支功能开发一半,需要终止修复线上Bug(git stash)
1:存储当前分支下的所有改动
git stash
git stash -m "存储的信息" // 最好加上这一步
1-1:第一次提交(这个警告无关紧要)
这的意思就是:警告:README.md中的LF将被CRLF取代。
该文件将在您的工作目录中有其原始的行尾已将工作目录和索引状态WIP保存在master上:617b816 feat:init(
这时候我是在master分支上,最近一次提交的commit -m 是feat:init)
1-2:第二次提交
Saved working directory and index state WIP on master: 617b816 feat: init
意思是:已将工作目录和索引状态WIP保存在master上:617b816 feat:init(
这时候我是在master分支上,最近一次提交的commit -m 是feat:init)
2:查看所有的存储列表
git stash list
你完成第一步的时就可以切换到其他分支解决问题了,但是可以使用第二步的语法看看和第一步缓存代码的提示是否相同就更稳健一点。
3:释放保存的内容,并将次保存内容删除(git stash pop)
git stash pop
如上图所示,会将最近一次存储释放。使用git stash list 查看存储列表,已经由原来的两条存储变成了一条。
4: git stash总结
通过git stash指令,保存临时修改的代码到本地,该操作将清空工作区,(可以使用git stash list 确定一下stash@{0}确认是否缓存成功)然后切换分支去处理bug,完成后切回原来的分支,通过git stash pop还原之前的修改。
十:连接多个远程仓库 (git remote)
场景: 由于我目前所在的公司和某个公司有合作,需要部署两套代码,即将代码提交到自己公司的仓库和另一个公司的仓库。所以就会出现一个项目连接多个远程仓库的情况。
1:查看远程仓库
git remote -v // 查看所有的远程仓库
这里的origin 就是仓库的默认别名,你拉取或者提交的时候可以会看到
git pull origin master或者git push origin master的操作。git pull 和 git push 以及master(主分支)都很好理解,这里的origin 就是仓库的意思,你提交/拉取那个仓库的那个分支的意思。
2:查看某个远程仓库详细信息
git remote show [你克隆项目的地址] // 查看所有的远程仓库
例如:git remote show github.com/xxx/vue2_de…
翻译:
*远程的github.com/xxx/vue2_de…
获取URL:github.com/xxx/vue2_de…
推送URL:github.com/xxx/vue2_de…
HEAD分支:master
为“git-push”配置的本地引用:
master向master推送(本地过期)
3:添加远程仓库的地址
// origin2表示仓库名
// git@gitee.com:xxx.git 表示仓库地址
git remote add origin2 git@gitee.com:xxx.git // 添加一个远程仓库的地址
注意:
git push origin master(也可以是其他分支) -f // 如果第一次推不上去代码,可以使用强推的方式
4:删除远程仓库
// 注意: 这里的 name 不是克隆的地址了,而是git remote -v查看远程仓库的别名
git remote rm name // 删除远程仓库
5:修改仓库名
// 同删除远程仓库 :old_name 和 new_name 都是别名
git remote rename old_name new_name // 修改仓库名
补充十一、将某一个指定的commit拉到一个新的分支上(cherry-pick)
1:由来
cherry-pick 就是git的一个指令,我是怎么知道这玩意的呢? 代码评审的时候,在c1分支上提交代码后,c1分支有问题,我直接在c1分支上改了,但是在出问题之前c1分支已经合并到master分支上了,也就是说,我需要切换到master分支上新开一个分支c2,拉取c1分支的代码,修改问题再提交上去,有木有更丝滑的操作呢?这个操作就是git cherry-pick commitId1 commitId2 commitId3....。它可以把指定commitId提交到一个新的分支上。
2:语法
git cherry-pick commitId1 commitId2 commitId3.... // 可以无限制添加commit id
3:具体使用
根据第一步的由来,分两种情况 (1) 你修改c1分支的bug没有问题,直接把这个commit合并到master
git checkout master // 切换到master分支上
git cherry-pick c1CommitId // 把c1修改bug的最后一次commitid放上去即可
(2) 在master上创建新分支c2后(注意:这个时候的c2已经是合并了c1的,所以不需要在c1上创建),把c1 的 commitId合并到c2上即可
git checkout master // 切换到master分支上
git checkout -b c2 // 创建c2分支并切换到c2分支上
git cherry-pick c1CommitId // 把c1修改bug的最后一次commitid放上去即可
参考文章 什么是cherry-pick: https://blog.csdn.net/GBS20200720/article/details/123840359
补充十二、git恢复被删除的远程分支
1、使用reflog,找到最后一次commitid
git reflog --date=iso
输入命令后你会得到删除的分支和commitid
2、找到目标分支(也就是你要恢复的分支)最后一次的commit ID
3、恢复
git checkout -b 分支名称 commitId
4、本地有分支了,再push到远程仓库即可
总结
参考文章:git代码规范 juejin.cn/post/684490…