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

第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 提交变更。

示例:创建项目并提交变更
  1. 创建项目目录

    mkdir myproject
    cd myproject
    
  2. 初始化 Git 项目

    git init
    
  3. 创建并编辑文件

    touch README.md
    echo "My Project" >> README.md
    
  4. 添加文件到暂存区

    git add README.md
    
  5. 提交变更

    git commit -m "Initial commit"
    

2. 实际开发场景

在实际开发中,可能会遇到很多问题,比如提交错误、想要撤销变更、查看不同版本之间的差异等。可以使用 git reset 回退版本,使用 git stash 暂时存储未提交的变更,使用 git diff 查看差异。

示例:回退版本
  1. 查看提交历史

    git log
    
  2. 回退到上一个版本

    git reset --hard HEAD~1
    
示例:暂存未提交的变更
  1. 暂存变更

    git stash
    
  2. 查看暂存列表

    git stash list
    
  3. 应用暂存的变更

    git stash pop
    
示例:查看差异
  1. 查看工作区与暂存区的差异

    git diff
    
  2. 查看暂存区与本地仓库的差异

    git diff --staged
    

五、多人协作下如何使用 Git

1. 基本流程

多人协作的基本流程包括创建项目、克隆项目、提交变更、拉取远程代码等。可以使用 git clone 克隆远程项目,使用 git push 将本地代码推送到远程仓库,使用 git pull 拉取远程代码。

示例:克隆项目并提交变更
  1. 克隆远程项目

    git clone https://github.com/username/myproject.git
    
  2. 进入项目目录

    cd myproject
    
  3. 创建并切换到新分支

    git checkout -b new-feature
    
  4. 编辑文件并添加到暂存区

    git add .
    
  5. 提交变更

    git commit -m "Add new feature"
    
  6. 推送变更到远程仓库

    git push origin new-feature
    

2. 冲突解决

在多人协作中,可能会遇到冲突,比如两个人修改了同一个文件的同一部分。解决冲突的方法是手动修改冲突部分,然后重新提交。

示例:解决冲突
  1. 拉取远程代码

    git pull origin main
    
  2. 解决冲突

    # 手动修改冲突部分
    
  3. 添加解决冲突的文件

    git add .
    
  4. 提交解决冲突的变更

    git commit -m "Resolve conflict"
    
  5. 推送变更到远程仓库

    git push origin new-feature
    

3. 工作流

常见的 Git 工作流包括功能分支工作流、GitFlow 工作流等。功能分支工作流是为每个功能创建一个分支,开发完成后合并到主分支。GitFlow 工作流则更加复杂,包括开发分支、发布分支、热修复分支等。

功能分支工作流
  1. 创建功能分支

    git checkout -b feature-branch
    
  2. 开发功能

    # 编辑文件
    
  3. 提交功能

    git add .
    git commit -m "Add feature"
    
  4. 合并功能到主分支

    git checkout main
    git merge feature-branch
    
  5. 删除功能分支

    git branch -d feature-branch
    
GitFlow 工作流
  1. 创建开发分支

    git checkout -b develop
    
  2. 创建功能分支

    git checkout -b feature-branch develop
    
  3. 开发功能

    # 编辑文件
    
  4. 提交功能

    git add .
    git commit -m "Add feature"
    
  5. 合并功能到开发分支

    git checkout develop
    git merge feature-branch
    
  6. 创建发布分支

    git checkout -b release-branch develop
    
  7. 发布版本

    git tag -a v1.0 -m "Release version 1.0"
    
  8. 合并发布分支到主分支和开发分支

    git checkout main
    git merge release-branch
    git checkout develop
    git merge release-branch
    
  9. 删除发布分支

    git branch -d release-branch
    
  10. 创建热修复分支

    git checkout -b hotfix-branch main
    
  11. 修复问题

    # 编辑文件
    
  12. 提交修复

    git add .
    git commit -m "Fix bug"
    
  13. 合并热修复到主分支和开发分支

    git checkout main
    git merge hotfix-branch
    git checkout develop
    git merge hotfix-branch
    
  14. 删除热修复分支

    git branch -d hotfix-branch
    

六、在 IDEA 中优雅地使用 Git

IDEA 集成了 Git 功能,可以方便地进行版本控制操作。可以使用 IDEA 的图形界面进行提交、切换分支、对比代码等操作。

示例:在 IDEA 中提交变更
  1. 打开项目

    # 在 IDEA 中打开项目
    
  2. 编辑文件

    # 编辑文件
    
  3. 查看变更

    # 在 IDEA 的 Version Control 面板中查看变更
    
  4. 提交变更

    # 在 IDEA 的 Version Control 面板中提交变更
    
  5. 切换分支

    # 在 IDEA 的 Version Control 面板中切换分支
    
  6. 合并分支

    # 在 IDEA 的 Version Control 面板中合并分支
    
  7. 解决冲突

    # 在 IDEA 的 Version Control 面板中解决冲突
    

七、Git Ignore

Git Ignore 文件用于指定哪些文件或目录不需要被 Git 管理。可以使用 *.log 忽略所有日志文件,使用 target/ 忽略整个 target 目录等。

示例:创建 Git Ignore 文件
  1. 创建 Git Ignore 文件

    touch .gitignore
    
  2. 编辑 Git Ignore 文件

    # 忽略日志文件
    *.log# 忽略目标目录
    target/
    
  3. 添加并提交 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 内核开发初期&#xff0c;由于开发者众多&#xff0c;协作成本很高&#xff0c;后来使用了 BitKeeper 工具来辅助协作…...

代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II 整数拆分 不同的二叉搜索树 (跳过)

62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流&#xff0c;很难想到。 代码随想录 视频讲解&#xff1a;动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_b…...

Java使用JDBC连接操作Sqlite 笔记250314

Java使用JDBC连接操作Sqlite 以下是使用 Java JDBC 连接和操作 SQLite 数据库的详细步骤&#xff1a; 1. 添加 SQLite JDBC 驱动 在项目中引入 SQLite JDBC 驱动依赖。 Maven 项目在 pom.xml 中添加&#xff1a;<dependency><groupId>org.xerial</groupId>…...

消息队列导致数据库数据读取不一致解决方案

我使用的是在数据库添加一个版本字段&#xff0c;记录版本&#xff0c;保证版本一致性&#xff0c;就能保证每次读取的是需要的内容。 具体问题&#xff1a;使用消息队列时&#xff0c;发送方给接收方发送消息&#xff0c;接收方修改了数据库的同时发送方查询数据库&#xff0…...

如何利用 Zeabur 实现 OceanBase 的一键部署

引言 Zeabur 是一个功能强大且即开即用的自动化部署平台&#xff0c;它不仅能迅速部署多种应用&#xff0c;还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户&#xff0c;如 AFFiNE、Bytebase 等企业客户&#xff0c;以及大量全栈和独立开发者。将…...

计算机网络进化论:从比特流到量子通信的深层解构

第一章 物理媒介与链路层(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库&#xff1a;https://www.cnblogs.com/luohenyueji/p/18333387 https://blog.csdn.net/weixin_45750972/article/details/124683402 a 差分进化算法 (Differential Evolution)&#xff1a;一种基于群体搜索的优化算法&#xff0c;通过模拟生物进化的过程来寻找最…...

go语言学习教程推荐,零基础到做项目

一、基础入门阶段 官方教程&#xff08;免费&#xff09; • A Tour of Go&#xff1a;交互式入门教程&#xff0c;边学边练 • Go by Example&#xff1a;通过300代码片段学习语法 入门书籍 • &#x1f4d8;《Go语言圣经》中文版&#xff08;免费在线阅读&#xff09;&#…...

【商城实战(30)】从0到1搭建商城数据分析功能,开启数据驱动增长引擎

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

(hash表+vector 数位和相等数对的最大和)leetcode 2342

一定要断点调试看看数据对不对的上&#xff01;&#xff01;&#xff01;不然很容易弄不清楚值和下标 这个题意思是在nums中找出相同数位和的值 如 数位和为7 nums中符合要求的有 43&#xff0c;7 在这些数中选两个相加取最大值&#xff0c;再与其他数位和取得的相加最大值比…...

c++中字符串string常用的函数

在C中&#xff0c; std::string 类有许多常用函数&#xff0c;以下是一些常见的&#xff1a; 1. length() 或 size() &#xff1a;返回字符串的长度&#xff08;字符个数&#xff09;&#xff0c;二者功能相同。例如&#xff1a; #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&#xff08;Kotlin MultiPlatform简称&#xff09;过程中报了错误&#xff0c;这个报错在直接运行desktop的main方法才会出现&#xff0c;用gradle运行却不会报错&#xff0c;新建的kmp项目也不会出现&#xff0c;我学习的写了一些代码的项目才会出现。   运…...

Cocos Creator Shader入门实战(四):预处理宏定义和Chunk

引擎&#xff1a; 3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 学习Shader&#xff0c;前期是让人烦躁无味的&#xff0c;后期可能就是各种的逻辑让人抓耳挠腮。 一成不变的内容&#xff1a;遵循引擎设定的规则&#xff0c;理解引擎要求的规范。 这里&#xff0c;简单…...

K8S快速部署

前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...

汽车PKE无钥匙进入系统一键启动系统定义与原理

汽车智能钥匙&#xff08;PKE无钥匙进入系统&#xff09;一键启动介绍 系统定义与原理 汽车无钥匙进入系统&#xff0c;简称PKE&#xff08;Passive Keyless Entry&#xff09;&#xff0c;该系统采用了RFID无线射频技术和车辆身份编码识别系统&#xff0c;率先应用小型化、小…...

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰&#xff0c;能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明&#xff1a; 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…...

WPF程序使用AutoUpdate实现自动更新

AutoUpdate.NET使用 一、AutoUpdater.NET 简介 AutoUpdater.NET 是一个开源库&#xff0c;支持从各种源&#xff08;如GitHub、FTP、HTTP服务器等&#xff09;下载并安装更新。它提供了灵活的配置选项&#xff0c;允许开发者根据需求定制更新检查逻辑和用户体验。 二、安装 …...

Dify平台离线镜像部署

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员&#xff0c;也能参与到 AI 应用的定义和数据运营过程中。 前提…...

每日Attention学习28——Strip Pooling

模块出处 [CVPR 20] [link] Strip Pooling: Rethinking Spatial Pooling for Scene Parsing 模块名称 Strip Pooling (SP) 模块结构 模块特点 本质是空间注意力的一种使用横/纵两个方向的条形池化获得一维方向上的重要程度&#xff0c;结合后便可以扩展至二维方向 模块代码 …...

Android Room 框架公共模块源码深度剖析(四)

一、引言 在 Android 开发中&#xff0c;数据持久化是一个常见的需求。Android Room 框架作为 Android Jetpack 组件的一部分&#xff0c;为开发者提供了一个抽象层&#xff0c;使得在 SQLite 数据库上进行数据操作变得更加简单和高效。Room 框架包含多个模块&#xff0c;其中…...

玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict

引言 UserDict是Python中collections模块提供的一个强大工具&#xff0c;它是dict的封装类&#xff0c;允许用户自定义字典的行为。通过继承UserDict&#xff0c;开发者可以轻松扩展字典的功能&#xff0c;实现自定义的字典逻辑。本文将详细介绍UserDict的关键用法和特性&…...

ollama docker设置模型常驻显存

参考&#xff1a; https://github.com/ollama/ollama/issues/5272 https://deepseek.csdn.net/67cfd7c93b685529b708fdee.html 通过-e传入环境变量&#xff0c;ollama运行&#xff1a; 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显卡&#xff08;12GB显存&#xff09;在Ubuntu 22.04系统部署DeepSeek-R1-32b-qwen-distill-q8模型的完整流程&#xff0c;结合最新技术规范与魔塔社区资源&#xff1a; 一、驱动与CUDA环境配置 1. 禁用开源驱动 bash sudo tee /etc/modprobe.d/blackli…...

无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战

一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏&#xff1a; 流量入口层&#xff1a;用户访问域名解析至高防CNAME节点&#xff08;如ai-protect.example.com&#xff09;智能调度层&#xff1a;基于AI模型动态分配清洗节点&#xff0c;实时更新节点IP池回…...

Chrome 调试器第二次连接不上?

一、连接不上 当使用 chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") 连接 Chrome 调试器时&#xff0c;调试一次后就连不上&#xff0c;可能由以下几种原因导致&#xff1a; 1. Chrome 实例关闭 原因&#xff1a;在调试…...

【深度学习|目标检测】YOLO系列anchor-based原理详解

YOLO之anchor-based 一、关于anchors的设置二、网络如何利用anchor来训练关于register_buffer训练阶段的anchor使用推理阶段的anchor使用 三、训练时的正负样本匹配静态策略&#xff1a;跨分支采样跨anchor采样跨grid采样 动态策略 总结起来其实就是&#xff1a;基于anchor-bas…...

Linux 入门:权限的认识和学习

目录 一.shell命令以及运行原理 二.Linux权限的概念 1.Linux下两种用户 cannot open directory .: Permission denied 问题 2.Linux权限管理 1).是什么 2).为什么&#xff08;权限角色目标权限属性&#xff09; 3).文件访问者的分类&#xff08;角色&#xff09; 4).文…...

搭建opensbi+kernel+rootfs及基本设备驱动开发流程

目录 一.编译qemu 运行opensbikernelrootfs 1.编译qemu-9.1.1 2.安装riscv64编译器 3. 编译opensbi 4.编译kernel 5.编译rootfs 设备驱动开发流程 1.安装 RISC-V 交叉编译工具链 2.驱动开发准备 3.编写简易中断控制器驱动&#xff08;PLIC&#xff09;​ 4.配置内核…...

QT非UI设计器生成界面的国际化

目的 UI设计器生成界面的国际化&#xff0c;比较容易实现些&#xff0c;因为有现成的函数可以调用&#xff0c;基本过程如下&#xff1a; void MainWindow::on_actLang_CN_triggered() {//中文界面qApp->removeTranslator(trans);delete trans;transnew QTranslator;trans…...