目录
目录
分布式Git :指网络中的计算机各自有一套独立的数据副本,不依赖于某一台计算机
集中式SVN:指数据都集中存储于某一台计算机,网络中的其他计算机都依赖于它
分布式优点:
1. 即使某一个终端的数据丢失,也可以进行数据的还原
2. 可以在无网络的环境下进行版本的创建,修改。
3. git 速度快,跟其相关的开源社区十分活跃,整个生态比较健康
常用的代码托管平台(开源的思想)(网站)(服务器):Github,Gitlab,Gitee
安装git:进入git 官网进行下载;
命令行查看安装版本: git --version
gitee为例:
生成添加SSH公钥:ssh-keygen -t ed25519 -C "x@qq.com"
查看:cat ~/.ssh/id_ed25519.pub
测试:ssh -T git@gitee.com
测试成功:
打开项目根目录:
检查项目状态:git status
处理,所有的文件添加到暂存区: git add .
在本地提交: git commit -m add "add files"
再检查状态:处于主分支,工作目录干净
上传到码云:
>git remote add origin https://gitee.com/liuyu_33789/xxx.git
本地仓库关联云端仓库:
>git push -u origin "master"
刷新页面 即可看到代码
基本的LUNIX命令:
- ls 展示当前目录下的子文件和子文件夹
- pwd 展示当前所在的路径
- mkdir 创建一个子文件夹
- touch 创建文件
- cd 进入某个目录
- cd .. 回退到上层目录
- cp 拷贝某个文件 cp a.js aa.js,拷贝目录加 -r , cp -r adc/ aaddcc
- mv 移动某个文件 mv a.js abc ,移动a.js 到abc 这个文件夹下面
- mv a.js aa.js 重命名a.js 为aa.js
- r m 删除某个文件,加 -r 删除目录:rm -r aabbcc
- cat 查看文件的内容:cat b.js 查看b.js
- more 分页查看跟cat 差不多: more more.js,字母b是上一页,空格下一页,q退出
- vim 编辑某一个文件,按esc 退出编辑,wq保存修改推出
- oh my zsh
拉取代码,分支,文件操作
拉去代码:在命令行中进行克隆: git clone url
分支:
分支常见的命令:
- 查看分支:git branch,远程分支:git branch -a,git status 也可以查看
- 创建分支:git branch liuyu 或者 git checkout -b xiaoyu,不仅仅创建而且切换到新创建的分支上
- 切换分支:git checkout name
- 删除分支:git branch -d xiaoyu ,-D是强制删除
暂存区,工作区,版本库:
管理文件:
- 将文件的添加操作/修改/删除 添加到暂存区,即修改了之后就需要添加:git add .
- 将暂存区的文件信息提交到本地版本库:git commit -m "含义" ,一步到位直接到版本库:git commit -am "modify",如果是第一次发布还是需要先add
- 查看提交记录:git log
- 不被git 管理的文件:.gitignore,意思是告诉git 请忽略这些文件
- 撤回还未提交到暂存区的文件:git checkout file/.
- 撤回已经提交到暂存区的文件:git reset head file/.
- 撤回已经提交到版本库的文件(软):git reset --soft head^
- 直接撤回到上一版本(硬):git reset --hard head^
分支合并,提交上线的流程:
基于Gitlab 的常见的工作流的形态:
- 不同的公司其工作流都有可能不一样
- 涉及到常用的分支:
- master 主分支
- develop 日常开发分支
- feature 功能分支 feature/liuyu/20210824
- release 预发布分支 release/3.0
- hotfix bug 修复的分支 hotfix/liuyu/20210824
开发及上线的流程:
- 拉取 develop 分支,创建 feature 分支
- 创建并与远程的 develop 分支关联 git checkout -b develop origin/develop
- 拉取远程的develop 分支,并于当前本地的分支进行合并: git pull origin develop
- 创建feature 分支开始干活:git checkout -b fearure/liuyu/20220621
- 提交上去:git commit -am "modify a.js"
- 将本地的分支 push到gitlab 上面去:git push origin feature/liuyu/20220621:feature/liuyu/20220621
- 提交 feature 分支到 gitlab,提交合并请求到 develop
- 将本地的分支 push到gitlab 上面去:git push origin feature/liuyu/20220621:feature/liuyu/20220621
- 合并到 develop 实在gitlab 中
- 在gitlab 中创建一个 merge requests
- 目标分支target branch 改为 develop,默认是main
- 测试有问题,继续在原先分支提交
- 继续在原分支上修改:
- 提交到本地分支:git commit -am "modify"
- 提交到远程,不用加 ' : ':git push origin feature/liuyu/20220621
- 再继续再gitlab 上操作
- 从 develop 分支创建 release 分支:
- 切换到develop分支上:git checkout develop
- 拉取远程的develop 分支最新的代码:git pull origin develop
- 创建一个release 分支:git checkout -b release/3.0.0
- push 到gitlab 上:git push orgin release/3.0.0:release/3.0.0
- release 分支测试有问题,从release 分支上拉取bug 修复分支
- 提交release 分支到 main 分支的和并请求,同时也合并到 develop
- 给main 分支打 tag 并提交发布
- git checkout main
- git status
- git pull origin main
- 打tag:git tag 20220621_1
- push 上去: git push origin 20220621_1:20220621_1
- 线上有问题,从main 拉取bug 修复bug 修复分支,后直接提交到main(同时到develop)
多人协作代码冲突场景及解决办法:
1. 先拉取:git pull origin develop
2. 切换到当前修改的分支:git checkout feature/liuyu/20220621
3. 手动合并到 develop:git merge develop
4. git status
5. 返回到代码里
6. 找到冲突是谁
7. 提交到版本库:git commit -am "merge"
8. 再次提交:git push origin feature/liuyu/20210621
代码回滚:
场景: 快速,稳健,紧张
不适用reset进行回滚:
1. reset 会直接操作了master 主分支
2. 手动操作代码的方式是有流程风险的
建议再在 gitlab 上用revent 来回滚:点击revent
修改后再push: 不能push 需要在进行依次revent
git rebase 的原理及 merge 的区别:
- merge 按照时间顺序,最后会生成merge 版本节点:git merge develop
- 默认情况下当前分支如果落后于对方分支,合并之后不会生成新的merge 版本节点
- 使用 --no-ff ,这个参数则一定和=会生成merge 版本节点 ,git merge liu/04 --no-ff
- rebase:重新设立起点: git rebase develop
- 会保持自己的版本顺序,不会生成merge 版本节点
- 冲突的解决
- git add 之后不用 commit ,用 git rebase --continue
rebase 处理冲突:提交到暂存区之后,最后不同commit 提交,用:git rebase --contine
cherry-pick 的原理及使用:
cherry-pick前:
cherry-pick后:
- cherry-pick 获取其他分支上某个版本节点到自己版本的节点
- 目标版本不会减少
- 冲突的解决
- git add 之后不使用 commit 使用git cherry-pick --continue
删除命令: