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

Git入门到精通:30分钟掌握核心技巧

目录

一、基础理论片

Git简介

Git安装

Git仓库

Git基本命令用法

仓库别名

二、实操命令篇

远程分支

分支的新建和合并

实操演示

1 本地新建仓库

2 gitee新建仓库

3 建立关系

4 新建分支

5 开发新功能

6 推送新分支

7 合并新分支到主分支

三、可视化工具篇

Gitee仓库的使用

IDEA的git使用

IDEA与Gitee仓库

四、Git 安全与配置篇

SSH key 与访问控制

生成和配置 SSH key

如何设置 Git 仓库权限(特别是私有仓库)

.gitignore 和 .gitattributes

五、常见问题篇

如何解决冲突?

1 产生冲突的常见情况:

2 解决步骤:

上传文件过大导致提交失败?

如何回滚提交,回滚方式有哪些?

为什么不建议强制提交?

Rebase 与 Merge 的区别?

一、基础理论篇

Git简介

Git 是一种分布式版本控制系统,最初由 Linus Torvalds 开发,用于管理 Linux 内核代码。

与集中式版本控制(如 SVN)不同,Git 每个开发者都有完整代码仓库副本,可在本地完成大部分操作。

主要特点:

  • 分布式:支持离线操作。

  • 高效:提交、切换、合并等操作快速。

  • 安全:使用 SHA1 校验内容完整性。

  • 支持多种工作流:如 Git Flow、Feature Branch 等。

什么是集中式版本控制:

img

  • 版本库是集中存放在中央服务器的

  • 而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活

  • 干完活了,再把自己的活推送给中央服务器

  • 中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆

缺点

  • 集中式版本控制系统最大的毛病就是必须联网才能工作

  • 如果在局域网内还好,带宽够大,速度够快

  • 可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,体验极其不好

什么是分布式版本控制系统:

img

  • 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,就不需要联网了

  • Git 这种系统,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录

  • 那任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复, 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份

  • 它还以指定和若干不同的远端代码仓库进行交互,因此你就可以在同一个项目中,分别和不同工作小组的人相互协作,可以根据需要设定不同的协作流程

Git安装

Windows 安装

  • 下载地址:Git - Downloads

  • 安装步骤:一直默认下一步即可,建议安装 Git Bash 工具。

  • 验证是否安装成功:

git --version #查看git版本

输出以下内容即为安装成功:

对于首次安装git环境的用户来说需要做以下配置:

git config --global user.name "你的名字" # 配置git的用戶名
git config --global user.email "你的邮箱" # 配置git的邮箱

Git仓库

1 什么是仓库?

Git 仓库是用来记录代码历史版本的地方,分为:

  • 本地仓库(.git 文件夹)

  • 远程仓库(如 Gitee、GitHub)

2 如何初始化git仓库

git init # 初始化本地仓库

执行完命令多了个.git文件(文件是隐藏的,需要打开隐藏可见),说明已经初始化好git的本地仓库

结构图如下所示:

MyProject/
├── .git/          ← Git 的核心目录
├── index.html
└── style.css

3 如何克隆远程仓库

git clone 远程仓库的地址 # 这里可以克隆远程仓库的地址 例如gitee gitLab github等代码托管平台

Git基本命令用法

git status  # 查看当前状态
git add  #文件名   暂存文件
git commit -m "说明"  #提交到本地仓库
git log 查看提交历史
git diff    #查看改动内容
git pull    #拉取远程更新
git push    #推送本地提交

以上的命令式git基本命令中最常用到的一些命令

Git 工作区与版本控制结构图:

工作区(Working Directory)↓ git add
暂存区(Stage/Index)↓ git commit
本地仓库(Local Repository)↓ git push
远程仓库(Remote Repository)

针对以上命令,我们可以用刚刚生成的git仓库来进行演练一下

仓库别名

仓库别名是为了简化远程地址的管理,尤其在多个远程仓库协同时非常有用

1 添加远程仓库

git remote add origin "远程仓库的地址url" # 这里可以是gitee gitLab等

这里的origin是本地仓库,和远程仓库关联在一起,也称作远程的别名

二、实操命令篇

远程分支

远程分支是对远程 Git 仓库中分支状态的引用,本地并不能直接修改它们。Git 允许你从远程仓库获取更新、创建追踪分支(tracking branch),并推送你的更改。

概念描述
origin默认的远程仓库名(可以自定义别名)。
远程分支存储在远程仓库中的分支,不能直接检出修改,通常以 origin/branch 形式存在。
追踪分支本地分支与远程分支关联,一般用于同步远程分支状态(如:main 跟踪 origin/main)。
同步远程分支状态通过 git fetchgit pull 等命令获取最新状态。

可通过一下命令查看远程分支和本地分支的关系

git branch -r # 查看所有远程分支

输出示例:

origin/main
origin/dev
origin/feature/login

其中origin为本地分支,main、dev、login均为远程分支

分支的新建和合并

#查看本地分支:
git branch#查看远程分支:
git branch -r#查看本地 + 远程所有分支:
git branch -a#新建分支并且切换分支
git branch feature/login
git checkout feature/login#等价于:
git checkout -b feature/login

实操演示

接下来我将从新建远程仓库和本地仓库来进行代码的分支。推送的演示,远程仓库我将采用gitee 代码采用一个前端的工程项目

1 本地新建仓库

我已经新建了一些文件,并且初始化了仓库

2 gitee新建仓库

已经在git上新建了远程仓库,接下来跟着上面的提示绑定关系

3 建立关系

通过下面的命令我们将我们的工程第一添加到gitee上面去

4 新建分支

这里我们新建分支并且切换到了新建的分支上去

5 开发新功能

这里模拟开发新功能,就是将代码修改一下,可以新建一个login.html文件

6 推送新分支

这里我进行了新功能的分支添加

我们可以看见远程仓库有新的分支上面有登录模块的新功能

7 合并新分支到主分支

master分支上面是没有最新的代码的这里我们需要合并分支

合并分支之后还需要我们去推送代码

git checkout master #切换到master分支
git merge feature/change #合并分支
git push # 推送最新代码

三、可视化工具篇

Gitee仓库的使用

上面已经向大家介绍了如何使用gitee仓库去新建一个远程仓库,接下来我们将从编程工具IDEA去教大家如何去使用可视化界面操作git

IDEA的git使用

我们使用IDEA去打开我们刚刚创建的git仓库

这里我改变登录界面代码 用IDEA去推送代码

可以看见推送成功

接下来我们将推送的代码合并到feature/change上面去

IDEA与Gitee仓库

JetBrains 出品的 IDEA(IntelliJ IDEA) 是一款功能强大的 Java 集成开发环境,不仅支持丰富的编程功能,还内置了对 Git 版本控制系统 的深度集成,极大地方便了开发者的日常协作与代码管理工作。

IDEA 与 Gitee 仓库配合使用,

四、Git 安全与配置篇

SSH key 与访问控制

Git 支持两种方式访问远程仓库:HTTPSSSH

  • HTTPS:每次操作都需要输入用户名和密码(可以配合 Token 简化)。

  • SSH:使用密钥对加密认证,更安全便捷,是企业和团队首选。

优点

  • 避免频繁输入账号密码;

  • 安全性更高(基于公钥加密);

  • 适合自动化部署和多设备操作。

生成和配置 SSH key

在gitee仓库的页面选择ssh克隆地址,选择生成RSA密钥 确保C盘下面有.ssh文件 没有可以新建一个

输出以下内容就是配置成功

如何设置 Git 仓库权限(特别是私有仓库)

创建私有仓库

  • 在 Gitee 上新建仓库时选择 “私有”;

  • 私有仓库默认仅创建者可访问。

添加协作者权限

  • 打开你的仓库 → 设置 → 成员管理;

  • 邀请他人加入,分配权限(只读、写入、管理员)。

.gitignore 和 .gitattributes

.gitignore:忽略哪些文件不提交

  • 作用:告诉 Git 哪些文件不需要纳入版本控制;

  • 常用于:临时文件、日志文件、编译产物、操作系统自动生成文件等。

    # 忽略编译产物
    *.class
    *.exe
    *.jar
    ​
    # 忽略 node_modules 目录
    node_modules/
    ​
    # 忽略日志文件
    *.log
    ​
    # 忽略 IDE 配置
    .idea/
    .vscode/

五、常见问题篇

如何解决冲突?

冲突是指在多个分支合并时,Git 无法自动决定哪个版本应该保留。

1 产生冲突的常见情况:
  • 两个分支修改了同一文件的同一行内容;

  • 一个分支删除了某文件,另一个分支却修改了该文件。

2 解决步骤:
  1. 执行合并操作(例如:)

    git merge feature/login #合并修改了的分支
  2. 出现冲突时 Git 会提示哪些文件冲突

  3. 打开冲突文件,查看冲突标识:

    text复制编辑<<<<<<< HEAD
    当前分支的内容
    =======
    被合并分支的内容
    >>>>>>> feature/login
  4. 手动选择保留哪一部分内容,然后删除冲突标记。

  5. 标记冲突已解决,提交即可:

    git add .
    git commit -m "解决冲突"

接下来我将从用刚才上面展示的项目去模拟冲突,接下来我将用IDEA去操作

1 在master分支修改login.html文件并且提交

2 在feature/change分支修改login.html文件并且提交

3 尝试合并分支

上传文件过大导致提交失败?

git一般默认不提交较大的文件(最大100M),如果需要可以尝试分阶段提交,也可以在配置文件中去修改参数、在隐藏的.git文件中config文件修改参数即可

如何回滚提交,回滚方式有哪些?

Git 提供多个回滚手段,视场景而定:

命令用途是否会改历史提交
git reset重置到某个提交点是(慎用)
git revert撤销某次提交,生成一个新的“反向提交”否(推荐)
git checkout -- 文件名撤销工作区的修改
git restore新版本替代了 checkout 的功能

例子:

  • 回滚到上一次提交(保留工作目录):

    git reset --soft HEAD~1
  • 回滚某次提交(保留记录):

    git revert <commit-id>

使用以下命令可以回滚提交并且撤销commit和add 保留工作区的内容

git reset --mixed HEAD~1

关于 git revert:

我们不小心提交了“增加登录功能”,现在想撤销该提交的影响,但不想破坏提交历史(比如已经 push 到远程)。

git revert c7d23bb

为什么不建议强制提交?

风险:

  • git push -f(强制推送)会覆盖远程分支历史,破坏团队协作

  • 其他成员无法拉取或丢失历史记录;

  • 容易导致不可恢复的数据丢失。

建议:

  • 在多人协作项目中,不要轻易使用 -f,除非全员知情或在 feature 分支上开发。

  • 如果需要清理历史,使用 rebase 并确认只有你使用该分支时才推送。

Rebase 与 Merge 的区别?

特点MergeRebase
定义将两个分支的历史合并,产生一个新的“合并提交”(merge commit)。把一个分支的提交“移动”到另一个分支的最新提交之后,重写提交历史。
提交历史保留了两个分支的完整历史,会出现分叉和合并节点。会生成一条线性的提交历史,看起来更“干净”。
合并过程创建一个新的合并提交,把两个分支的改动合并起来。将目标分支的最新提交“放到前面”,再依次应用当前分支的提交。
冲突处理冲突在合并提交时处理一次。冲突可能在每个提交应用时都要处理。
是否改写历史不改写已有提交历史。改写提交历史(对公共分支使用需谨慎)。
适用场景适合保留分支的所有合并历史,适合多人协作时使用。适合想让提交历史更清晰,或者需要整理提交记录时使用。

相关文章:

Git入门到精通:30分钟掌握核心技巧

目录 一、基础理论片 Git简介 Git安装 Git仓库 Git基本命令用法 仓库别名 二、实操命令篇 远程分支 分支的新建和合并 实操演示 1 本地新建仓库 2 gitee新建仓库 3 建立关系 4 新建分支 5 开发新功能 6 推送新分支 7 合并新分支到主分支 三、可视化工具篇 G…...

Redis7底层数据结构解析

redisObject 在 Redis 的源码中&#xff0c;Redis 会将底层数据结构&#xff08;如 SDS、hash table、skiplist 等&#xff09;统一封装成一个对象&#xff0c;这个对象叫做 redisObject&#xff0c;也简称 robj。 typedef struct redisObject {unsigned type : 4; // 数…...

Android 异步编程中协程的完整实战示例

一、全链路数据加载&#xff1a;网络请求 数据库缓存 在实际开发中&#xff0c;数据加载通常需要先检查本地缓存&#xff0c;若缓存失效则从网络获取&#xff0c;并将结果更新到本地。以下是完整的 MVVM 架构示例&#xff1a; 1. 项目结构 app/ ├── data/ …...

多部手机连接同一wifi的ip一样吗?

在家庭和办公环境中&#xff0c;多台手机同时连接同一个WiFi路由器已成为常态。不少用户会产生疑问&#xff1a;这些设备的IP地址会相同吗&#xff1f;下面就一起来了解一下吧。 一、多部手机连接同一WiFi的IP‌一样吗 多部手机连接同一WiFi时的IP地址是否相同&#xff0c;需要…...

大语言模型值ollama使用(1)

ollama为本地调用大语言模型提供了便捷的方式。下面列举如何在windows系统中快捷调用ollama。 winR打开运行框&#xff0c;输入cmd 1、输入ollama list 显示已下载模型 2、输入ollama pull llama3 下载llama3模型 3、 输入 ollama run llama3 运行模型 4、其他 ollama li…...

大模型应用开发之Langchain

一、框架简述 Langchain 是一个用于构建和管理 LLM 应用的开发框架。它为开发者提供了工具和接口&#xff0c;以便于更轻松地将大语言模型集成到应用程序中&#xff0c;并处理语言模型生成的响应、管理对话状态、执行链式调用、处理多步任务等。 二、Langchain主要模块 1、M…...

thc-ssl-dos:SSL 压力测试的轻量级工具!全参数详细教程!Kali Linux教程!

简介 THC-SSL-DOS 是一款用于验证 SSL 性能的工具。 建立安全的 SSL 连接需要服务器比客户端高 15 倍的处理能力。 THC-SSL-DOS 利用这种不对称特性&#xff0c;通过使服务器过载并使其断网。 此问题影响当今所有 SSL 实现。供应商自 2003 年以来就已意识到这个问题&#x…...

什么是内网ip证书

内网IP证书是一种基于公钥基础设施&#xff08;PKI&#xff09;技术的数字证书&#xff0c;专门用于保护企业内部网络中通过IP地址访问服务的通信安全。以下是对内网IP证书的详细解析&#xff1a; 一、核心定义与用途 定义&#xff1a;内网IP证书是SSL/TLS证书的一种特殊类型…...

【速通RAG实战:进阶】17、AI视频打点全攻略:从技术实现到媒体工作流提效的实战指南

一、AI视频打点的技术底层与数据处理流程 (一)视频内容结构化的核心技术栈 AI视频打点的本质是将非结构化视频数据转化为带时间戳的结构化信息,其技术流程涵盖音视频处理、语音识别、自然语言处理三大核心模块,形成“数据采集-内容解析-智能标记-协同应用”的完整闭环。 …...

立控信息智能装备柜:科技赋能军队装备管理现代化

在军事装备管理领域&#xff0c;高效、安全、智能化的存储解决方案至关重要。传统的人工管理模式不仅效率低下&#xff0c;还容易因人为疏忽导致装备丢失或管理混乱。​LKONE智能装备柜凭借先进的物联网技术、生物识别安全系统和智能管理功能&#xff0c;为军队提供了一套高效、…...

【freertos-kernel】queue(发送)

文章目录 补充各种yeildTCB的xStateListItem和xEventListItem xQueueGenericSendprvCopyDataToQueueprvNotifyQueueSetContainervTaskInternalSetTimeOutStatevTaskSuspendAllxTaskResumeAllprvLockQueueprvUnlockQueueprvIncrementQueueTxLockvTaskPlaceOnEventListprvAddCurr…...

【华为云物联网】如何实现在 MQTT.fx 上模拟数据间隔上传一次,并按设定系数变动数据

虽然 MQTT.fx 本身不支持定时循环脚本发送消息,但可以通过以下方式 实现在 MQTT.fx 上模拟设备参数每隔 1 分钟上传一次,并按设定系数变动数据: ✅ 推荐方式:使用 Python 脚本+MQTT.fx 联动观察 你将用 Python 自动发送数据,MQTT.fx 订阅对应主题观察是否发送成功。 🧩…...

破解高原运维难题:分布式光伏智能监控系统的应用研究

安科瑞刘鸿鹏 摘要 高原地区光照资源丰富&#xff0c;具有发展分布式光伏发电的巨大潜力。然而&#xff0c;该地区复杂的气候环境、地形地貌和运维条件对光伏电站的运行与维护带来严峻挑战。本文结合Acrel1000DP分布式光伏监控系统的技术特点和典型应用案例&#xff0c;探讨其…...

图标变白,开始菜单栏无法打开程序(以jupyter为例)

不知道是本人删了一些东西导致的还是什么原因&#xff0c;总之现在本人的jupyter只能通过命令行打开&#xff0c;以往我是从开始菜单栏打开。琢磨了一段时间&#xff0c;发现是.ico文件没有了。重新在网上下载图片&#xff0c;用网站图片转 ico 图标 - 锤子在线工具 转换一下格…...

大语言模型(LLM)入门 - (1) 相关概念

文章来自&#xff1a;大语言模型(LLM)小白入门自学项目-TiaoYu-1 GitHub - tiaoyu1122/TiaoYu-1: For People! For Freedom!For People! For Freedom! Contribute to tiaoyu1122/TiaoYu-1 development by creating an account on GitHub.https://github.com/tiaoyu1122/TiaoYu…...

行为型:访问者模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 1、核心思想 目的&#xff1a;数据结构稳定的情况下&#xff0c;解决数据与算法的耦合问题。适用于对象结构稳定但需频繁扩展操作的场景。 实现&#xff1a;在访问数据时根据数据类…...

C++数据结构 : 哈希表的实现

C数据结构 &#xff1a; 哈希表的实现 目录 C数据结构 &#xff1a; 哈希表的实现引言1. 哈希概念1.1 直接定址法1.2 哈希冲突1.3 负载因子 2. 哈希函数2.1 除法散列法/除留余数法2.2 乘法散列法&#xff08;了解&#xff09;2.3 全域散列法&#xff08;了解&#xff09; 3. 处…...

抖音电商客户端一面面经

抖音电商客户端一面面经 时间&#xff1a; 25.05.30 岗位&#xff1a; 抖音电商客户端开发工程师 形式&#xff1a; 技术一面 刚刚结束了字节跳动抖音电商客户端开发工程师岗位的技术一面&#xff0c;整体感觉考察范围非常全面&#xff0c;涵盖了基础、项目、算法、系统设计等…...

JavaScript 在 AcroForm 中的广泛应用

在Adobe表单(特别是SAP Interactive Forms by Adobe)中使用JavaScript的各种技巧和方法,下面这些代码片段可以帮助开发者更高效地处理表单逻辑和交互。 1. 获取数据内容 从上下文结构中获取数据 var LV_DATA = xfa.resolveNode("$record.IM_TEST.FIELDNAME").val…...

Socket编程之TCP套件字

基于的TCP套件字编程流程 1. Socket套接字 Socket是一个编程接口&#xff08;网络编程接口&#xff09;&#xff0c;是一种特殊的文件描述符&#xff08;write/read&#xff09;。Socket并不 仅限于TCP/IP Socket独立于具体协议的编程接口&#xff0c;这个接口位于TCP/IP四层…...

AD9268、AD9643调试过程中遇到的问题

Ad9268芯片 AD9268是一款双通道、16位、80 MSPS/105 MSPS/125 MSPS模数转换器(ADC)。AD9268旨在支持要求高性能、低成本、小尺寸和多功能的通信应用。双通道ADC内核采用多级差分流水线架构&#xff0c;集成输出纠错逻辑。每个ADC都具有宽带宽、差分采样保持模拟输入放大器&…...

Java-File类基本方法使用指南

Java-File类基本方法使用指南 一、File类基础概念1.1 什么是File类1.2 File类的构造函数 二、文件和目录的创建与删除2.1 创建文件 - createNewFile()2.2 创建目录 - mkdir() 和 mkdirs()2.3 删除文件或目录 - delete() 三、文件和目录的查询与判断3.1 存在性判断 - exists()3.…...

Python爬虫实战:研究PyQuery库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。如何高效地从海量的网页数据中提取有价值的信息,成为当前信息技术领域的一个重要研究方向。网络爬虫作为一种自动获取网页内容的程序,能够按照一定的规则,自动地抓取万维网信息,在搜索引擎…...

第九篇:MySQL 安全加固与访问控制策略实战

数据库的安全不仅仅是防止外部入侵&#xff0c;更包括合理配置账户权限、日志审计、网络加密、配置加固等。本文将系统性梳理 MySQL 的安全机制与实战加固方法&#xff0c;助你构建安全可靠的数据库运行环境。 一、数据库安全风险面 数据库常面临的威胁&#xff1a; 弱口令或默…...

神经网络-Day40

目录 单通道图片的规范写法图像任务中的张量形状NLP任务中的张量形状1. **Flatten操作**2. **view/reshape操作** 总结彩色图片的规范写法 图像数据的格式以及模型定义的过程&#xff0c;和之前结构化数据的略有不同&#xff0c;主要差异体现在2处 模型定义的时候需要展平图像由…...

WindowServer2022下docker方式安装dify步骤

WindowServer2022下docker方式安装dify步骤&#xff08;稳定后考虑部署至linux中&#xff09; 教程&#xff1a;https://blog.csdn.net/qq_49035156/article/details/143264534 0、资源要求 ---windows&#xff1a;8核CPU、16G内存、200G500G存储 ---10.21.31.122/administra…...

Java五种方法批量处理List元素全解

Java:如何优雅批量处理List中的每个元素 一、场景分析&#xff1a;为什么需要批量处理List&#xff1f;二、核心方法&#xff1a;五种实现方式对比2.1 普通for循环&#xff08;最直接的方式&#xff09;代码示例&#xff1a;优缺点&#xff1a; 2.2 Java 8 replaceAll&#xff…...

springboot文件上传下载

基于ResponseEntity的下载响应 SpringBoot中&#xff0c;ResponseEntity类型可以精确控制HTTP响应&#xff0c;为文件下载提供完善的HTTP头信息。 RestController RequestMapping("/api/download") public class FileDownloadController {GetMapping("/file/{…...

webpack CDN打包优化

CDN网络分发服务 请求资源时最近的服务器将缓存内容交给用户 体积较大且变动不多的文件存在CDN文件中 react react-dom资源 // 添加自定义对于webpack的配置const path require(path) const { whenProd, getPlugin, pluginByName } require(craco/craco)module.exports {//…...

ARM内核一览

经常看介绍某某牛批芯片用的又是ARM什么核&#xff0c;看的云里雾里&#xff0c;所以简单整理整理。&#xff08;内容来自官网和GPT&#xff09; 1 ARM 内核总体分类 系列特点应用场景Cortex-M超低功耗、低成本、实时性嵌入式系统、微控制器、IoTCortex-R高可靠性、硬实时汽车…...