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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础设计模式——结构型模式 - 代理模式

第三部分&#xff1a;结构型模式 - 代理模式 (Proxy Pattern) 在学习了享元模式如何通过共享对象来优化资源使用后&#xff0c;我们来探讨结构型模式的最后一个模式——代理模式。代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。 核心思想&#xff1a;为其…

【OSS】 前端如何直接上传到OSS 上返回https链接,如果做到OSS图片资源加密访问

使用阿里云OSS&#xff08;对象存储服务&#xff09;进行前端直接上传并返回HTTPS链接&#xff0c;同时实现图片资源的加密访问&#xff0c;可以通过以下步骤实现&#xff1a; 前端直接上传到OSS并返回HTTPS链接 设置OSS Bucket&#xff1a; 确保你的OSS Bucket已创建&#xf…

TDenigne 集群可视化管理

可视化管理工具 为方便用户更高效地使用和管理 TDengine&#xff0c;TDengine 3.0 版本推出了一个全新的可视化组件 taosExplorer。这个组件旨在帮助用户在不熟悉 SQL 的情况下&#xff0c;也能轻松管理 TDengine 集群。通过 taosExplorer&#xff0c;用户可以轻松查看 TDengi…

Centos7安装gitlab

环境准备&#xff1a; 操作系统&#xff1a;Centos7 内存&#xff1a;2G以上 磁盘&#xff1a;50G 安全&#xff1a;关闭防火墙&#xff0c;selinux 1、安装GitLab所需依赖 yum -y install policycoreutils openssh-server openssh-clients postfix 2、设置postfix开机自启…

【前端面经】云智慧一面

写在前面&#xff1a;面经只是记录博主遇到的题目。每题的答案在编写文档的时候已经有问过deepseek&#xff0c;它只是一种比较普世的答案&#xff0c;要学得深入还是靠自己 Q&#xff1a;手撕代码&#xff0c;两个有序数组排序 A&#xff1a; function mysort(arr1, arr2) {…

Leetcode 3568. Minimum Moves to Clean the Classroom

Leetcode 3568. Minimum Moves to Clean the Classroom 1. 解题思路2. 代码实现 题目链接&#xff1a;3568. Minimum Moves to Clean the Classroom 1. 解题思路 这一题我的核心思路就是广度优先遍历遍历剪枝。 显然&#xff0c;我们可以给出一个广度优先遍历来给出所有可能…

Spring Boot,注解,@RestController

RestController 是 Spring MVC 中用于创建 RESTful Web 服务的核心注解。 RestController 核心知识点 REST 作用: RestController 是一个方便的组合注解&#xff0c;它结合了 Controller 和 ResponseBody 两个注解。 Controller: 将类标记为一个控制器&#xff0c;使其能够处理…

【计算机网络】Linux下简单的UDP服务器(超详细)

套接字接口 我们把服务器封装成一个类&#xff0c;当我们定义出一个服务器对象后需要马上初始化服务器&#xff0c;而初始化服务器需要做的第一件事就是创建套接字。 &#x1f30e;socket函数 这是Linux中创建套接字的系统调用,函数原型如下: int socket(int domain, int typ…

Fashion-MNIST LeNet训练

前面使用线性神经网络softmax 和 多层感知机进行图像分类&#xff0c;本次我们使用LeNet 卷积神经网络进行 训练&#xff0c;期望能捕捉到图像中的图像结构信息&#xff0c;提高识别精度&#xff1a; import torch import torchvision from torchvision import transforms f…

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天&#xff0c;EasyRTC作为一款全平台互通的实时视频通话方案&#xff0c;实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同&#xff0c;开发者通过该方案可快速搭建1v1实时音视频通信系统&#xff0c;适…

查看make命令执行后涉及的预编译宏定义的值

要查看 make 命令执行后涉及的预编译宏定义&#xff08;如 -D 定义的宏&#xff09;及其值&#xff0c;可以采用以下方法&#xff1a; 1. 查看 Makefile 中的宏定义 直接检查 Makefile 或相关构建脚本&#xff08;如 configure、CMakeLists.txt&#xff09;&#xff0c;寻找 -…

【C/C++】面试常考题目

面试中最常考的数据结构与算法题&#xff0c;适合作为刷题的第一阶段重点。 ✅ 分类 & 推荐题目列表&#xff08;精选 70 道核心题&#xff09; 一、数组 & 字符串&#xff08;共 15 题&#xff09; 题目类型LeetCode编号两数之和哈希表#1盛最多水的容器双指针#11三数…

【芯片学习】555

一、引脚作用 二、原理图 三、等效原理图 1.比较器 同相输入端大于反相输入端&#xff0c;输出高电平&#xff0c;反之亦然 2.三极管 给它输入高电平就可以导通 3.模拟电路部分 4.数字电路部分 这部分的核心是RS触发器&#xff0c;R-reset代表0&#xff0c;set是置位代表1&am…

Linux《文件系统》

在之前的系统IO当中已经了解了“内存”级别的文件操作&#xff0c;了解了文件描述符、重定向、缓冲区等概念&#xff0c;在了解了这些的知识之后还封装出了我们自己的libc库。接下来在本篇当中将会将视角从内存转向磁盘&#xff0c;研究文件在内存当中是如何进行存储的&#xf…

Java-代码段-http接口调用自身服务中的其他http接口(mock)-并建立socket连接发送和接收报文实例

最新版本更新 https://code.jiangjiesheng.cn/article/367?fromcsdn 推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》 1. controller入口 ApiOperation("模拟平台端现场机socket交互过程,需要Authorization")PostMapping(path "/testS…

基于递归思想的系统架构图自动化生成实践

文章目录 一、核心思想解析二、关键技术实现1. 动态布局算法2. 样式规范集成3. MCP服务封装三、典型应用场景四、最佳实践建议五、扩展方向一、核心思想解析 本系统通过递归算法实现了Markdown层级结构到PPTX架构图的自动转换,其核心设计思想包含两个维度: 数据结构递归:将…

Python包管理器 uv替代conda?

有人问&#xff1a;python的包管理器uv可以替代conda吗? 搞数据和算法的把conda当宝贝&#xff0c;其他的场景能替代。 Python的包管理器有很多&#xff0c;pip是原配&#xff0c;uv是后起之秀&#xff0c;conda则主打数据科学。 uv替代pip似乎只是时间问题了&#xff0c;它…

使用pnpm、vite搭建Phaserjs的开发环境

首先&#xff0c;确保你已经安装了 Node.js 和 npm。然后按照以下步骤操作&#xff1a; 一、使用pnpm初始化一个新的 Vite 项目 pnpm create vite 输入名字 选择模板&#xff0c;这里我选择Vanilla,也可以选择其他的比如vue 选择语言 项目新建完成 二、安装相关依赖 进入项…

JS逆向案例—喜马拉雅xm-sign详情页爬取

JS逆向案例——喜马拉雅xm-sign详情页爬取 声明网站流程分析总结 声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&am…

姜老师的MBTI课程:MBTI是可以转变的

我们先来看内向和外向这条轴&#xff0c;I和E内向和外向受先天遗传因素的影响还是比较大的&#xff0c;因为它事关到了你的硬件&#xff0c;也就是大脑的模型。但是我们在大五人格的排雷避坑和这套课程里面都强调了一个观点&#xff0c;内向和外向各有优势&#xff0c;也各有不…