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

项目一系列-第2章 Git版本控制

第2章 Git版本控制

2.1 Git概述

Git是什么?Git是一个分布式版本控制工具,于管理开发过程中的文件。

Git有哪些作用

  • 远程备份:Git可以将本地代码备份到远程服务器,防止数据丢失。
  • 多人协作:Git运行多个开发者在同一个代码库协同工作。开发者可以共享代码、合并变更、解决冲突等。
  • 代码回溯:Git可以返回之前的代码版本。用于修复错误和恢复代码。
  • 版本切换:Git可以切换分支或者不同的提交切换代码版本。

2.2 Git环境准备

1、安装Git

2、进行全局配置

3、配置SSH公钥

4、建立本地仓库及远程仓库

安装Git怎么做

下载地址:https://git-scm.com/download/win

全局配置要几步

1、设置用户信息(必须配置,用于远程连接)

git config --global user.name "ychenchen"
git config --global user.email "ycc@itcast.cn"

2、查看配置信息

git config --list

3、初始化本地仓库及远程仓库

git init

配置SSH公钥要几步?

1、生成SSH公钥

  • ssh-keygen -t rsa
    
  • 不断回车

  • 如果公钥已经存在,则自动覆盖

2、获取公钥

cat ~/.ssh/id_rsa.pub

3、到Gitee中设置SSH公钥

4、验证是否配置成功

ssh -T git@gitee.com

2.3 Git常用命令

常见命令主要分为三大类:

  • 本地仓库命令
  • 远程仓库命令
  • 分支命令

本地仓库命令

# 初始化本地仓库
git init
# 将所有文件提交到暂存区
git add .
# 将暂存区文件提交到本地仓库
git commit -m"第一次提交所有文件到本地仓库"
# 将暂存区文件取消暂存
git reset
# 查看详细的提交日志
git log
# 查看简洁的提交日志
git reflog
# 切换到指定版本
git reset --hard [version]

远程仓库命令

# 添加关联的远程仓库
git remote add <shortname> <url>
# 查看关联的远程仓库
git remote [-v]
# 提交本地仓库代码到远程仓库
git push origin master
# --set-upstream 建立起和远端分支的关联,后续可省分支名和远端名
git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]
# 克隆远程仓库到本地
git clone <url>
# 拉取最新的远程仓库
git pull <shortname> <branch>
# fatal: refusing to merge unrelated histories
git pull --allow-unrelated-histories

分支命令

# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a
# 创建分支
git branch <branchName>
# 切换分支
git checkout <branchName>
git checkout -b <branchName> # 创建并切换分支
# 合并分支:在当前分支合并其他分支
git merge <branchName>
# 删除分支
git branch -d b1 # 删除分支时,需要做各种检查
git branch -D b1 # 不做任何检查,强制删除

2.3.1 分支创建规则

以下是一些常见的Git分支创建规则:

1、主分支(master)

主分支用于项目的发布和部署,只有稳定的代码才能被合并到master分支。

master分支上,每一个tag标记一个线上版本。

2、开发分支(develop/dev)

开发分支包含项目的最新代码,但功能都在从该分支独立出来的特性分支中开发。

通常命名为developdev

3、特性分支(feature)

特性分支用于开发特定的功能,每个新功能都应在从develop分支创建的feature/xxx形式的特性分支上进行开发和测试。

4、预发布分支(release)

预发布分支用于准备发布新版本,进行最后的测试和调整,从 develop 分支创建以确保代码稳定,命名格式为release/xxx,其中xxx是具体的版本号。

测试过程中若存在bug需要修复,则直接由开发者在release分支修复并提交。

测试完成之后,将 release 分支合并到 master 和 develop 分支,此时 master 为最新代码,用作上线。

5、修复分支(hotfix/bugfix)

修复分支用于解决线上紧急bug或修复已知问题,从 master 分支创建以确保修复代码直接应用于稳定版本,命名格式为hotfix/xxxbugfix/xxx

完成bug修复后将代码合并到master分支和develop分支,合并完成后可以删除该分支。

长期稳定存在的分支只有 master 和 develop 分支,别的分支在完成对应的使命之后都会合并到这两个分支然后被删除。

简单总结如下:

分支作用
master线上稳定版本分支
develop衍生出 feature 分支和 release 分支
feature完成特定功能开发的分支,存在多个,功能合并之后删除
release准备待发布版本的分支,存在多个,版本发布之后删除
hotfix紧急热修复分支,存在多个,紧急版本发布之后删除

分支示意图如下:

2.3.2 解决冲突

下面是在命令行常见的解决冲突步骤:

  • 使用git status命令查看哪些文件存在冲突。
  • 使用git diff命令查看冲突文件的差异。
  • 手动解决冲突,并验证解决后是否正确。
  • 使用git add标记为冲突已解决。
  • 使用git commit命令提交解决冲突后的更改。

2.4 忽略文件

.gitignore忽略文件:忽略项目代码中不需要的文件,一般是编译文件、临时文件等,把它们纳入版本控制系统中毫无意义。

存放在项目的根目录。

.gitignore内容:

.git
logs
rebel.xml
target/
!.mvn/wrapper/maven-wrapper.jar
log.path_IS_UNDEFINED
.DS_Store
offline_user.md
*.class### IntelliJ IDEA ###
.idea
*.iws
*.ipr

2.5 IDEA集成Git

2.5.1 在IDEA中配置Git

在idea的settings面板中,【Version Control】=>【Git】

  • 指定Git安装路径【Path to Git executable】

2.5.2 IDEA中的操作方法

本地仓库操作

1、初始化本地仓库【Create Git Repository】

  • 依次选择菜单【Version control】—【Create Git Repository】
  • 选择当前项目根目录,点击【OK】

2、克隆远程仓库【Clone】

  • 在IDEA的菜单栏中选择Git,再点击【Get from Version Control】或者【Clone】
  • 在弹出的【Clone Repository】窗口中输入远程仓库的URL地址和对应的本地仓库存放目录,点击【Clone】按钮进行仓库克隆操作

3、将文件加入到暂存区

  • 右键文件或项目,选择【Git】,选择【Add】
  • 文件变成绿色即为成功

4、将暂存区文件提交到版本库

  • 右键文件或项目,选择【Git】,选择【Commit …】
  • 提交本次的日志信息
  • 文件变成黑色即为成功

5、查看日志

  • 右键文件或项目,选择【Git】,选择【Show History】
  • 展示了提交的日志列表信息即为成功

远程仓库操作

1、查看远程仓库和添加远程仓库

  • 右键项目,找到【Git】–>【Manage Remotes…】
  • 在弹出的框中可以查看已经关联的远程仓库,如果没有,则可以点击"+"号来新增远程仓库

2、推送至远程仓库

  • 在当前分支中,点击【Push…】
  • 在弹出的【Push Commits】窗口中可以看到本次推送的文件,点击【Push】按钮即可

3、从远程仓库拉取代码

  • 在当前分支中,点击【Update Project…】

分支操作

1、查看分支

  • 在【Version control】查看即可
  • 书签标记代表当前使用分支

2、创建分支

  • 分支窗口中点击【New Branch】,弹出输入分支名称,点击Create按钮,完成分支的创建

3、切换分支

  • 点击要切换的分支,选择【Checkout】

4、推送分支

  • 点击当前分支,选择【Push…】

5、合并分支

  • 点击要切换的分支,选择【Merge】

6、解决冲突

  • 推荐点击【Merge…】
  • 有三个框,根据实际情况合并
http://www.dtcms.com/a/320755.html

相关文章:

  • 05--STL认识(了解)
  • 静态与动态住宅代理IP的技术差异和技术详解
  • Pytest项目_day09(skip、skipif跳过)
  • oracle-plsql理解和操作
  • 有鹿机器人:如何用±2cm精度重塑行业标准?
  • Function + 异常策略链:构建可组合的异常封装工具类
  • 机械学习--SVM 算法
  • 【Leetcode Hot 100 题目精华解析2025】python自用 --128.最长连续序列
  • 腾讯前端面试真题
  • Kafka生产者事务机制原理
  • Java集合中的链表
  • 解耦主库负载,赋能数据流转:MySQL Binlog Server 核心指南
  • Web 图像捕获革命:ImageCapture API 全面解析与实战指南
  • mt6897 scp a+g sh5201 porting记录
  • 数据结构:哈希表、排序和查找
  • 光子精密3D工业相机的应用与优势解析
  • CS231n2017 Assignment3 PyTorch部分
  • 代理模式在C++中的实现及面向对象设计原则的满足
  • 利用哥斯拉(Godzilla)进行文件上传漏洞渗透实战分析
  • ​「解决方案」Linux 无法在 NTFS 硬盘上创建文件/文件夹的问题
  • C++多态与虚函数的原理解析
  • MySQL的触发器:
  • 虹科技术分享 | LIN总线译码功能与LIN控制交流发电机(二)
  • 灌区信息化智能管理系统解决方案
  • 计算机视觉CS231n学习(5)
  • AI开发平台行业全景分析与战略方向建议
  • C++归并排序
  • 使用 Python GUI 工具创建安全的密码短语
  • tmi8150b在VM=3.3v电压下,如何提高转速,记录
  • 高性能 Vue 应用运行时策略