当前位置: 首页 > news >正文

Git 简介和基础使用

Git 简介和基础使用

  • 1.Git 入门
    • 1.1 版本控制简介
    • 1.2 安装 Git
    • 1.3 配置 Git
    • 1.4 创建 Git 仓库
    • 1.5 基本工作流程
    • 1.6 文件状态管理
  • 1.7 远程仓库管理
  • 1.8 git commit 规范
  • 1.9 vscode中git的使用
  • 2.分支管理
  • 3.Git 进阶操作
    • 3.1 设置别名
    • 3.2 标签管理
    • 3.3 版本回退
    • 3.4 储藏更改
    • 3.4 子模块
  • 4.Git 团队协作
    • 4.1 git工作流
    • 4.2 分支策略
    • 4.3 Pull Request
    • 4.4 代码冲突解决
  • 5.Git 高级技巧
    • 5.1 交互式 rebase
    • 5.2 cherry-pick
    • 5.3 git revert
    • 5.4 git reflog
    • 5.4 Git Hooks
    • 5.5 git clone url --depth 1
  • 6.GitLab 与远程仓库协作
    • 6.1 GitLab 简介
    • 6.2 GitLab 基本操作
    • 6.3 GitLab 远程仓库操作
    • 6.4 GitLab 分支与合并请求 (Merge Request)
    • 6.5 GitLab CI/CD 简介
  • 7.Git 实战案例
    • 分支管理
    • 开发流程
  • 8.常见问题及解决方案
  • 附录
    • Git 学习资源推荐

1.Git 入门

1.1 版本控制简介

  • 什么是版本控制
  • 集中式 vs 分布式版本控制
  • Git 的优势

1.2 安装 Git


Git-2.31.0-64-bit
git-2.31.0

1.3 配置 Git

  • 查看配置信息
  • 配置用户信息
  • 配置SSH秘钥(可选但非常推荐)
    ai自行搜索:git如何配置ssh秘钥
    在这里插入图片描述

1.4 创建 Git 仓库

    1. 在本地初始化一个新的 Git 仓库
初始化:
提交:
关联远程仓库:
    1. 从远程仓库克隆到本地(新手推荐)
git clone <远程仓库的 URL>
上面的URL可以是传统意义的URL,下载时需要输入用户名和密码。
更多的时候是一个git开头的地址,需要配置SSH秘钥(参考1.3)。
    1. 当前 .git 目录

1.5 基本工作流程

在这里插入图片描述
在这里插入图片描述

  • 工作区、暂存区和版本库
  • 添加文件到暂存区 (git add)
  • 提交更改到仓库 (git commit)
  • 本次仓库推送到远程仓库(git push
  • 查看提交历史 (git log)

1.6 文件状态管理

  • 查看文件状态 (git status)
  • 查看提交历史(git log)
  • 忽略文件 (.gitignore)
  • 当前仓库git配置(.git)
  • 撤销修改 (git checkout, git restore)
  • 删除文件 (git rm)

1.7 远程仓库管理

  • 添加远程仓库 (git remote add)
  • 查看远程仓库信息 (git remote -v)
  • 推送本地提交到远程仓库 (git push)
  • 拉取远程仓库更新到本地 (git pull)
  • 克隆远程仓库 (git clone)

1.8 git commit 规范

参考文档:https://juejin.cn/post/6844903866451001352
ps:建议经常git commit
问题:如果经常git commit会导致历史记录非常多和琐碎,如何解决?

1.9 vscode中git的使用

工作区、暂存区和版本库的切换,等等其他

2.分支管理

  • 创建分支 (git branch)
  • 删除分支 (git branch -d)
  • 切换分支 (git checkout)
  • 合并分支 (git merge)
    • 快进合并 (fast-forward)
    • 递归合并
    • 三方合并(three-way-merge)

解决冲突(重点,业务开发中经常会发生,专业班一定要掌握)

3.Git 进阶操作

3.1 设置别名

3.2 标签管理

  • 创建标签 (git tag)
  • 查看标签 (git tag)
  • 推送标签到远程仓库 (git push --tags)
  • 删除标签 (git tag -d)

3.3 版本回退

  • 查看提交历史 (git log)
  • 回退到指定版本 (git reset)
  • 撤销回退 (git reflog)

3.4 储藏更改

  • 储藏当前工作目录 (git stash)
  • 查看储藏列表 (git stash list)
  • 恢复储藏内容 (git stash apply)
  • 删除储藏内容 (git stash drop)

3.4 子模块

  • 添加子模块 (git submodule add)
  • 初始化子模块 (git submodule init)
  • 更新子模块 (git submodule update)
  • 删除子模块

4.Git 团队协作

4.1 git工作流

  • 集中式工作流
  • 功能分支工作流
  • Gitflow 工作流
  • Forking 工作流
    Git工作流实践方法

4.2 分支策略

  • 主分支 (master/main)
  • 开发分支 (develop)
  • 功能分支 (feature)
  • 发布分支 (release)
  • 修复分支 (hotfix)

4.3 Pull Request

  • 创建 Pull Request
  • 代码审查
  • 合并 Pull Request

4.4 代码冲突解决

  • 冲突产生的原因
  • 手动解决冲突
  • 使用工具解决冲突

5.Git 高级技巧

5.1 交互式 rebase

  • 修改提交历史
  • 合并提交
  • 删除提交

5.2 cherry-pick

  • 选择性地应用提交

5.3 git revert

  • 取消指定的提交内容

5.4 git reflog

  • 本地仓库中所有引用(如分支、HEAD)的更新历史

5.4 Git Hooks

  • 自定义 Git 行为
  • 常用钩子介绍
  • 前端代码规范中的husky原理

5.5 git clone url --depth 1

  • 对于非常大的仓库,部分克隆,而不是完整的历史记录

6.GitLab 与远程仓库协作

6.1 GitLab 简介

  • git 和 gitlab关系
  • 什么是 GitLab,以及页面预览
  • GitLab 的核心功能(代码托管、CI/CD、项目管理等)
  • GitLab 与 GitHub 的区别

6.2 GitLab 基本操作

  • 创建 GitLab 项目
  • 设置项目可见性(私有、内部、公开)
  • 添加项目成员并分配权限
  • 设置保护分支(重点)
  • 克隆 GitLab 项目到本地 (git clone)

6.3 GitLab 远程仓库操作

  • 关联本地仓库与 GitLab 远程仓库 (git remote add)
  • 推送本地分支到 GitLab (git push)
  • 从 GitLab 拉取更新 (git pull)

6.4 GitLab 分支与合并请求 (Merge Request)

  • 创建分支并推送到 GitLab
  • 提交合并请求 (Merge Request)
  • 代码审查与讨论
  • 解决合并冲突
  • 完成合并请求

6.5 GitLab CI/CD 简介

  • 什么是 CI/CD
  • 配置 .gitlab-ci.yml 文件
  • 使用 GitLab Runner 执行自动化任务
  • 实现自动化测试与部署

7.Git 实战案例

💡研发培训院团队协作开发项目git工作流介绍

分支管理

在这里插入图片描述
在这里插入图片描述

master分⽀:主⼲分⽀,⼀定不能被污染
develop分⽀:开发分⽀,所有的开发都必须在开发分⽀进⾏,所有的修改必须合并到开发分⽀

开发流程

  1. 项⽬初始化后,从master新建test和develop分⽀,分别对应正式环境,测试环境和开发环境
  2. 开发新功能时,从develop新建功能分⽀v1.0(此处以1.0版本举例,具体前面可带自己姓名)
  3. v1.0功能开发完后,合并v1.0到develop分⽀,本地启动develop分⽀测试联调
  4. v1.0测试联调完后,合并develop到test分⽀,部署test分⽀到测试环境进⾏测试
  5. v1.0测试完后,合并develop到master分⽀,部署master分⽀到正式环境上线,并且打tag分⽀
  6. 开发其他版本新功能时,重复2-5步即可
  7. 假如master分⽀发现bug,从master新建bugfix1.0临时分⽀,在bugfix1.0分⽀进⾏修复,修复后,合并bugfix1.0到develop分⽀,合并bugfix1.0到master分⽀,部署master分⽀到正式环境上线并且打tag分⽀tag20231220,之后可删除bugfix1.0分⽀

8.常见问题及解决方案

😃解决方案请自行查阅资料学习。下面是我给出的答案,仅供参考,不一定完全对。

  • 如何撤销上一次提交?
 git reset --soft HEAD^
  • 如何修改上一次提交的信息?
git commit --amend
  • 如何撤销工作区的更改?
 # 撤销指定文件
git checkout -- <filename># 撤销所有更改
git checkout -- 
  • 如何删除本地分支?
# 安全删除(已合并)
git branch -d <branch-name># 强制删除(未合并)
git branch -D <branch-name>
  • 如何删除远程分支?
git push origin --delete <branch-name>
  • 本地分支有未提交的内容,如何切换到其他分支?
# 暂存更改
git stash# 切换分支
git checkout <other-branch># 恢复更改
git stash pop
  • 如何修改远程仓库地址?(项目迁移时保存历史)
git remote set-url origin <new-url>
  • 如何强制推送本地分支到远程?(为什么要强制,什么时候需要强制)
git push --force-with-lease origin <branch-name>
  • 如何恢复误删的分支?
# 查找提交哈希
git reflog# 恢复分支
git branch <branch-name> <commit-hash> 
  • 如何解决合并冲突?

编辑冲突文件(<<<<<<<, =======, >>>>>>> 标记)
解决冲突后添加到暂存区:git add
完成合并:git commit

  • 如何回退到某个提交?
 # 软回退(保留更改)
git reset --soft <commit-hash># 硬回退(丢弃更改)
git reset --hard <commit-hash>
  • 如何修改提交中的某个commit msg?
 git rebase -i <commit-hash>^
# 将 pick 改为 reword (r)
  • 如何合并多个提交?
git rebase -i HEAD~n
# 将 pick 改为 squash (s) 或 fixup (f)
  • 如何把当前的提交合并到上一个提交中去?
git commit --amend --no-edit
  • 如何提交本地的feature分支功能到远程的master分支?
# 方法1:合并后推送
git checkout master
git merge feature
git push origin master# 方法2:通过 Pull Request
git push origin feature
# 然后在 Git 平台创建 PR 合并到 master

附录

Git 学习资源推荐

  • git沙箱游戏
    https://learngitbranching.js.org/?locale=zh_CN
  • git官方教程
    https://git-scm.com/book/zh/v2
  • 相见恨晚!终于有篇文章能把Git给讲明白了
    https://juejin.cn/post/7182500848713334821#heading-10
  • 多年 Git 使用心得 & 常见问题整理
    https://juejin.cn/post/6844904191203213326
  • Git 工作流实践方案探索
    https://juejin.cn/post/7050012586296737805
  • gitlab ci
    https://meigit.readthedocs.io/en/latest/gitlab_ci_.gitlab-ci.yml_detail.html
http://www.dtcms.com/a/568810.html

相关文章:

  • HarmonyOS Marquee组件深度解析:构建高性能滚动视觉效果
  • 网站建设绿茶科技zencart 网站建设
  • vscode arm交叉编译 中 cmakeTools 编译器设置
  • 全自动化立体仓库巷道堆垛机使用西门子1500PLC通过EtherCAT主站转Profinet实现与EtherCAT协议的伺服进行通讯方案案例
  • MAC M1系统用pyinstaller分别打包支持ARM系统的app和支持Inter系统的APP
  • MTK平台详解`adb devices`输出的序列号组成
  • uniapp实现的Tab 选项卡组件模板
  • 学习Linux——网络基础管理
  • 杭州做网站比较出名的公司有哪些网站 内容建设存在的问题
  • C# ASP.NET MVC Model 分类:数据传输对象(DTO)—— 跨层传数的 “精简快递“
  • Elasticsearch 7.0 介绍与配置详解
  • 如何理解前端开发中框架一词及其优点?
  • ELK学习记录
  • Paho MQTT C 客户端源码深入解析
  • 零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
  • Vue 核心语法详解:模板语法中的绑定表达式与过滤器(附 Vue3 替代方案)
  • CentOS7.6 部署 k3s 单机版
  • 【算法训练营 · 专项练习篇】Stream流与函数式编程
  • 泰州企业做网站百度地图怎么导航环线
  • int8_to_float(output_tensor->data.int8, output_float, load_class_num);
  • 使用Nmap扫描某个服务器所有开放端口
  • 如何看网站是用什么程序做的如何把qq音乐导入到wordpress
  • SpringCloud网关实战:路由与鉴权全解析
  • 基于ResNet50和PyTorch的猫狗图像分类系统设计与实现
  • 自回归模型例题(AR)与ACF/PACF图绘制
  • ESP32-WROOM-32E LED点灯系列
  • 《红色脉络:一部PLMN在中国的演进史诗 (1G-6G)》 第15篇 | 结语:无尽的前沿——PLMN的未来与中国的全球角色
  • 付网站开发费计入什么科目seo外包杭州
  • 外贸网站域名被封免费网络游戏大全
  • PySide6 Win10记事本从零到一——第七章 格式菜单界面与功能实现