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

目录

一、基础理论片

Git简介

Git安装

Git仓库

Git基本命令用法

仓库别名

二、实操命令篇

远程分支

分支的新建和合并

实操演示

[1 本地新建仓库](#1 本地新建仓库)

[2 gitee新建仓库](#2 gitee新建仓库)

[3 建立关系](#3 建立关系)

[4 新建分支](#4 新建分支)

[5 开发新功能](#5 开发新功能)

[6 推送新分支](#6 推送新分支)

[7 合并新分支到主分支](#7 合并新分支到主分支)

三、可视化工具篇

Gitee仓库的使用

IDEA的git使用

IDEA与Gitee仓库

[四、Git 安全与配置篇](#四、Git 安全与配置篇)

[SSH key 与访问控制](#SSH key 与访问控制)

[生成和配置 SSH key](#生成和配置 SSH key)

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

[.gitignore 和 .gitattributes](#.gitignore 和 .gitattributes)

五、常见问题篇

如何解决冲突?

[1 产生冲突的常见情况:](#1 产生冲突的常见情况:)

[2 解决步骤:](#2 解决步骤:)

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

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

为什么不建议强制提交?

[Rebase 与 Merge 的区别?](#Rebase 与 Merge 的区别?)

一、基础理论篇

Git简介

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

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

主要特点:

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

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

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

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

什么是集中式版本控制:

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

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

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

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

缺点

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

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

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

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

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

  • 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 的区别?

特点 Merge Rebase
定义 将两个分支的历史合并,产生一个新的"合并提交"(merge commit)。 把一个分支的提交"移动"到另一个分支的最新提交之后,重写提交历史。
提交历史 保留了两个分支的完整历史,会出现分叉和合并节点。 会生成一条线性的提交历史,看起来更"干净"。
合并过程 创建一个新的合并提交,把两个分支的改动合并起来。 将目标分支的最新提交"放到前面",再依次应用当前分支的提交。
冲突处理 冲突在合并提交时处理一次。 冲突可能在每个提交应用时都要处理。
是否改写历史 不改写已有提交历史。 改写提交历史(对公共分支使用需谨慎)。
适用场景 适合保留分支的所有合并历史,适合多人协作时使用。 适合想让提交历史更清晰,或者需要整理提交记录时使用。
相关推荐
XH1.1 小时前
学习HAL库STM32F103C8T6(SPI、门禁密码实验)
stm32·嵌入式硬件·学习
Da Da 泓5 小时前
LinkedList模拟实现
java·开发语言·数据结构·学习·算法
Larry_Yanan5 小时前
QML学习笔记(十五)QML的信号处理器(MouseArea)
c++·笔记·qt·学习·ui
Larry_Yanan7 小时前
QML学习笔记(十七)QML的属性变更信号
javascript·c++·笔记·qt·学习·ui
eqwaak07 小时前
Flask实战指南:从基础到高阶的完整开发流程
开发语言·后端·python·学习·flask
GilgameshJSS7 小时前
STM32H743-ARM例程9-IWDG看门狗
c语言·arm开发·stm32·单片机·嵌入式硬件·学习
月盈缺8 小时前
学习嵌入式的第四十一天——ARM——时钟与定时器
arm开发·学习
努力毕业的小土博^_^9 小时前
【深度学习|学习笔记】详细讲解一下 深度学习训练过程中 为什么 Momentum 可以加速训练?
人工智能·笔记·深度学习·学习·momentum
清风吹过9 小时前
少样本学习论文分享:多模态和类增量学习
论文阅读·人工智能·深度学习·学习·机器学习
Larry_Yanan9 小时前
QML学习笔记(十四)QML的自定义模块
开发语言·笔记·qt·学习·ui