第27周JavaSpringboot git初识
Git 课程笔记
一、Git 的介绍
1. Git 的诞生背景
Git 是 Linux 内核的作者 Linus Torvalds 为了更好地管理 Linux 内核开发而创建的版本控制系统。在 Linux 内核开发初期,由于开发者众多,协作成本很高,后来使用了 BitKeeper 工具来辅助协作,但后来由于合作结束,Linus Torvalds 决定自己开发一套版本管理系统,这就是 Git。Git 是开源的,可以在 GitHub 上找到该项目。
2. Git 的作用
Git 的主要作用是帮助我们控制版本。如果没有版本管理系统,我们在开发过程中可能会遇到很多问题,比如无法回到之前的版本、文件备份占用大量空间、多人协作时文件合并困难等。Git 能够很好地解决这些问题。
二、Git 的安装与配置
1. Git 的安装
Git 的安装相对容易,可以在官网找到不同操作系统的安装包。以 Mac OS 为例,可以从官网下载安装器,然后按照提示进行安装。安装完成后,可以通过 git --version 命令验证是否安装成功。
2. Git 的配置
在使用 Git 之前,需要进行一些配置,比如设置用户名和邮箱。可以使用以下命令进行配置:
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
三、Git 的重要概念
1. Git、GitHub 和 GitLab
Git 是一个版本控制系统,GitHub 和 GitLab 是基于 Git 的代码托管平台。GitHub 是目前世界上最大的代码托管平台,很多开源项目都在上面。GitLab 则更适合企业内部使用,可以搭建私有的代码托管平台。
2. 工作区、暂存区和本地仓库
工作区是我们平时编写代码的地方,当我们想要把工作区的变动提交到版本控制系统时,需要先将文件添加到暂存区,然后再提交到本地仓库。
3. HEAD、分支和远程仓库
HEAD 指向当前所在的提交,分支是开发中的不同线路,远程仓库是团队协作时用来共享代码的仓库。
四、单人开发者如何使用 Git
1. 基本工作流程
单人开发的基本工作流程包括创建项目、添加文件、提交变更等。可以使用 git init 创建新的 Git 项目,使用 git add 将文件添加到暂存区,使用 git commit 提交变更。
示例:创建项目并提交变更
-
创建项目目录
mkdir myproject cd myproject -
初始化 Git 项目
git init -
创建并编辑文件
touch README.md echo "My Project" >> README.md -
添加文件到暂存区
git add README.md -
提交变更
git commit -m "Initial commit"
2. 实际开发场景
在实际开发中,可能会遇到很多问题,比如提交错误、想要撤销变更、查看不同版本之间的差异等。可以使用 git reset 回退版本,使用 git stash 暂时存储未提交的变更,使用 git diff 查看差异。
示例:回退版本
-
查看提交历史
git log -
回退到上一个版本
git reset --hard HEAD~1
示例:暂存未提交的变更
-
暂存变更
git stash -
查看暂存列表
git stash list -
应用暂存的变更
git stash pop
示例:查看差异
-
查看工作区与暂存区的差异
git diff -
查看暂存区与本地仓库的差异
git diff --staged
五、多人协作下如何使用 Git
1. 基本流程
多人协作的基本流程包括创建项目、克隆项目、提交变更、拉取远程代码等。可以使用 git clone 克隆远程项目,使用 git push 将本地代码推送到远程仓库,使用 git pull 拉取远程代码。
示例:克隆项目并提交变更
-
克隆远程项目
git clone https://github.com/username/myproject.git -
进入项目目录
cd myproject -
创建并切换到新分支
git checkout -b new-feature -
编辑文件并添加到暂存区
git add . -
提交变更
git commit -m "Add new feature" -
推送变更到远程仓库
git push origin new-feature
2. 冲突解决
在多人协作中,可能会遇到冲突,比如两个人修改了同一个文件的同一部分。解决冲突的方法是手动修改冲突部分,然后重新提交。
示例:解决冲突
-
拉取远程代码
git pull origin main -
解决冲突
# 手动修改冲突部分 -
添加解决冲突的文件
git add . -
提交解决冲突的变更
git commit -m "Resolve conflict" -
推送变更到远程仓库
git push origin new-feature
3. 工作流
常见的 Git 工作流包括功能分支工作流、GitFlow 工作流等。功能分支工作流是为每个功能创建一个分支,开发完成后合并到主分支。GitFlow 工作流则更加复杂,包括开发分支、发布分支、热修复分支等。
功能分支工作流
-
创建功能分支
git checkout -b feature-branch -
开发功能
# 编辑文件 -
提交功能
git add . git commit -m "Add feature" -
合并功能到主分支
git checkout main git merge feature-branch -
删除功能分支
git branch -d feature-branch
GitFlow 工作流
-
创建开发分支
git checkout -b develop -
创建功能分支
git checkout -b feature-branch develop -
开发功能
# 编辑文件 -
提交功能
git add . git commit -m "Add feature" -
合并功能到开发分支
git checkout develop git merge feature-branch -
创建发布分支
git checkout -b release-branch develop -
发布版本
git tag -a v1.0 -m "Release version 1.0" -
合并发布分支到主分支和开发分支
git checkout main git merge release-branch git checkout develop git merge release-branch -
删除发布分支
git branch -d release-branch -
创建热修复分支
git checkout -b hotfix-branch main -
修复问题
# 编辑文件 -
提交修复
git add . git commit -m "Fix bug" -
合并热修复到主分支和开发分支
git checkout main git merge hotfix-branch git checkout develop git merge hotfix-branch -
删除热修复分支
git branch -d hotfix-branch
六、在 IDEA 中优雅地使用 Git
IDEA 集成了 Git 功能,可以方便地进行版本控制操作。可以使用 IDEA 的图形界面进行提交、切换分支、对比代码等操作。
示例:在 IDEA 中提交变更
-
打开项目
# 在 IDEA 中打开项目 -
编辑文件
# 编辑文件 -
查看变更
# 在 IDEA 的 Version Control 面板中查看变更 -
提交变更
# 在 IDEA 的 Version Control 面板中提交变更 -
切换分支
# 在 IDEA 的 Version Control 面板中切换分支 -
合并分支
# 在 IDEA 的 Version Control 面板中合并分支 -
解决冲突
# 在 IDEA 的 Version Control 面板中解决冲突
七、Git Ignore
Git Ignore 文件用于指定哪些文件或目录不需要被 Git 管理。可以使用 *.log 忽略所有日志文件,使用 target/ 忽略整个 target 目录等。
示例:创建 Git Ignore 文件
-
创建 Git Ignore 文件
touch .gitignore -
编辑 Git Ignore 文件
# 忽略日志文件 *.log# 忽略目标目录 target/ -
添加并提交 Git Ignore 文件
git add .gitignore git commit -m "Add .gitignore"
八、总结
1. Git 常用命令总结
| 命令 | 描述 |
|---|---|
git init | 创建新的 Git 项目 |
git clone | 克隆远程项目 |
git add | 将文件添加到暂存区 |
git commit | 提交变更 |
git status | 查看当前状态 |
git log | 查看提交历史 |
git branch | 查看或创建分支 |
git checkout | 切换分支 |
git merge | 合并分支 |
git push | 将本地代码推送到远程仓库 |
git pull | 拉取远程代码 |
git reset | 回退版本 |
git stash | 暂时存储未提交的变更 |
git diff | 查看差异 |
2. 单人开发与多人协作场景总结
在单人开发中,主要关注基本工作流程和实际开发场景中的问题解决。在多人协作中,需要关注基本流程、冲突解决和工作流。掌握这些内容,可以相对熟练地使用 Git 进行版本控制。
图形解释步骤
工作区、暂存区和本地仓库的关系
工作区 -> 暂存区 -> 本地仓库git add git commit
分支的创建和合并
main|vdevelop <- feature-branch^|git checkout -b feature-branch|vgit merge feature-branch
冲突解决流程
git pull origin main
解决冲突
git add .
git commit -m "Resolve conflict"
git push origin new-feature
希望这些详细的笔记和图形解释步骤对你有所帮助!如果有任何问题或需要进一步的解释,请随时告诉我。
相关文章:
第27周JavaSpringboot git初识
Git 课程笔记 一、Git 的介绍 1. Git 的诞生背景 Git 是 Linux 内核的作者 Linus Torvalds 为了更好地管理 Linux 内核开发而创建的版本控制系统。在 Linux 内核开发初期,由于开发者众多,协作成本很高,后来使用了 BitKeeper 工具来辅助协作…...
代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II 整数拆分 不同的二叉搜索树 (跳过)
62.不同路径 62. 不同路径 - 力扣(LeetCode) 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。 代码随想录 视频讲解:动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_b…...
Java使用JDBC连接操作Sqlite 笔记250314
Java使用JDBC连接操作Sqlite 以下是使用 Java JDBC 连接和操作 SQLite 数据库的详细步骤: 1. 添加 SQLite JDBC 驱动 在项目中引入 SQLite JDBC 驱动依赖。 Maven 项目在 pom.xml 中添加:<dependency><groupId>org.xerial</groupId>…...
消息队列导致数据库数据读取不一致解决方案
我使用的是在数据库添加一个版本字段,记录版本,保证版本一致性,就能保证每次读取的是需要的内容。 具体问题:使用消息队列时,发送方给接收方发送消息,接收方修改了数据库的同时发送方查询数据库࿰…...
如何利用 Zeabur 实现 OceanBase 的一键部署
引言 Zeabur 是一个功能强大且即开即用的自动化部署平台,它不仅能迅速部署多种应用,还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户,如 AFFiNE、Bytebase 等企业客户,以及大量全栈和独立开发者。将…...
计算机网络进化论:从比特流到量子通信的深层解构
第一章 物理媒介与链路层(1960-1970) 1.1 比特流物理编码 // 曼彻斯特编码实现 vector<bool> manchester_encode(uint8_t byte) {vector<bool> bits;for(int i=7; i>=0; --i) {bool bit = (byte >> i) & 1;bits.push_back(bit); // 前半周期bits…...
超参数优化算法:scikit-opt库、Scikit-Optimize库
1 scikit-opt库:https://www.cnblogs.com/luohenyueji/p/18333387 https://blog.csdn.net/weixin_45750972/article/details/124683402 a 差分进化算法 (Differential Evolution):一种基于群体搜索的优化算法,通过模拟生物进化的过程来寻找最…...
go语言学习教程推荐,零基础到做项目
一、基础入门阶段 官方教程(免费) • A Tour of Go:交互式入门教程,边学边练 • Go by Example:通过300代码片段学习语法 入门书籍 • 📘《Go语言圣经》中文版(免费在线阅读)&#…...
【商城实战(30)】从0到1搭建商城数据分析功能,开启数据驱动增长引擎
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
(hash表+vector 数位和相等数对的最大和)leetcode 2342
一定要断点调试看看数据对不对的上!!!不然很容易弄不清楚值和下标 这个题意思是在nums中找出相同数位和的值 如 数位和为7 nums中符合要求的有 43,7 在这些数中选两个相加取最大值,再与其他数位和取得的相加最大值比…...
c++中字符串string常用的函数
在C中, std::string 类有许多常用函数,以下是一些常见的: 1. length() 或 size() :返回字符串的长度(字符个数),二者功能相同。例如: #include <iostream> #include <str…...
NO.39十六届蓝桥杯备战|结构体八道练习|加号小于号运算符重载|自定义排序(C++)
加号运算符重载_牛客题霸_牛客网 #include <iostream> using namespace std;class Time {public:int hours; // 小时int minutes; // 分钟Time() {hours 0;minutes 0;}Time(int h, int m) {this->hours h;this->minutes m;}void show() {cout <<…...
kmp报错→Cannot find skiko-windows-x64.dll.sha256
1、前言 学习kmp(Kotlin MultiPlatform简称)过程中报了错误,这个报错在直接运行desktop的main方法才会出现,用gradle运行却不会报错,新建的kmp项目也不会出现,我学习的写了一些代码的项目才会出现。 运…...
Cocos Creator Shader入门实战(四):预处理宏定义和Chunk
引擎: 3.8.5 您好,我是鹤九日! 回顾 学习Shader,前期是让人烦躁无味的,后期可能就是各种的逻辑让人抓耳挠腮。 一成不变的内容:遵循引擎设定的规则,理解引擎要求的规范。 这里,简单…...
K8S快速部署
前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...
汽车PKE无钥匙进入系统一键启动系统定义与原理
汽车智能钥匙(PKE无钥匙进入系统)一键启动介绍 系统定义与原理 汽车无钥匙进入系统,简称PKE(Passive Keyless Entry),该系统采用了RFID无线射频技术和车辆身份编码识别系统,率先应用小型化、小…...
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰,能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明: 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…...
WPF程序使用AutoUpdate实现自动更新
AutoUpdate.NET使用 一、AutoUpdater.NET 简介 AutoUpdater.NET 是一个开源库,支持从各种源(如GitHub、FTP、HTTP服务器等)下载并安装更新。它提供了灵活的配置选项,允许开发者根据需求定制更新检查逻辑和用户体验。 二、安装 …...
Dify平台离线镜像部署
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。 前提…...
每日Attention学习28——Strip Pooling
模块出处 [CVPR 20] [link] Strip Pooling: Rethinking Spatial Pooling for Scene Parsing 模块名称 Strip Pooling (SP) 模块结构 模块特点 本质是空间注意力的一种使用横/纵两个方向的条形池化获得一维方向上的重要程度,结合后便可以扩展至二维方向 模块代码 …...
Android Room 框架公共模块源码深度剖析(四)
一、引言 在 Android 开发中,数据持久化是一个常见的需求。Android Room 框架作为 Android Jetpack 组件的一部分,为开发者提供了一个抽象层,使得在 SQLite 数据库上进行数据操作变得更加简单和高效。Room 框架包含多个模块,其中…...
玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict
引言 UserDict是Python中collections模块提供的一个强大工具,它是dict的封装类,允许用户自定义字典的行为。通过继承UserDict,开发者可以轻松扩展字典的功能,实现自定义的字典逻辑。本文将详细介绍UserDict的关键用法和特性&…...
ollama docker设置模型常驻显存
参考: https://github.com/ollama/ollama/issues/5272 https://deepseek.csdn.net/67cfd7c93b685529b708fdee.html 通过-e传入环境变量,ollama运行: docker run -d --gpusall -e OLLAMA_KEEP_ALIVE-1 -v ollama:/root/.ollama -p 11434:114…...
双3060、Ubuntu22.04、cuda12.8安装deepseek 32b-Q8
以下是针对双RTX 3060显卡(12GB显存)在Ubuntu 22.04系统部署DeepSeek-R1-32b-qwen-distill-q8模型的完整流程,结合最新技术规范与魔塔社区资源: 一、驱动与CUDA环境配置 1. 禁用开源驱动 bash sudo tee /etc/modprobe.d/blackli…...
无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战
一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏: 流量入口层:用户访问域名解析至高防CNAME节点(如ai-protect.example.com)智能调度层:基于AI模型动态分配清洗节点,实时更新节点IP池回…...
Chrome 调试器第二次连接不上?
一、连接不上 当使用 chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") 连接 Chrome 调试器时,调试一次后就连不上,可能由以下几种原因导致: 1. Chrome 实例关闭 原因:在调试…...
【深度学习|目标检测】YOLO系列anchor-based原理详解
YOLO之anchor-based 一、关于anchors的设置二、网络如何利用anchor来训练关于register_buffer训练阶段的anchor使用推理阶段的anchor使用 三、训练时的正负样本匹配静态策略:跨分支采样跨anchor采样跨grid采样 动态策略 总结起来其实就是:基于anchor-bas…...
Linux 入门:权限的认识和学习
目录 一.shell命令以及运行原理 二.Linux权限的概念 1.Linux下两种用户 cannot open directory .: Permission denied 问题 2.Linux权限管理 1).是什么 2).为什么(权限角色目标权限属性) 3).文件访问者的分类(角色) 4).文…...
搭建opensbi+kernel+rootfs及基本设备驱动开发流程
目录 一.编译qemu 运行opensbikernelrootfs 1.编译qemu-9.1.1 2.安装riscv64编译器 3. 编译opensbi 4.编译kernel 5.编译rootfs 设备驱动开发流程 1.安装 RISC-V 交叉编译工具链 2.驱动开发准备 3.编写简易中断控制器驱动(PLIC) 4.配置内核…...
QT非UI设计器生成界面的国际化
目的 UI设计器生成界面的国际化,比较容易实现些,因为有现成的函数可以调用,基本过程如下: void MainWindow::on_actLang_CN_triggered() {//中文界面qApp->removeTranslator(trans);delete trans;transnew QTranslator;trans…...
