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

本地Git基础知识

本地Git基础知识

文章目录

  • 本地Git基础知识
    • 初识Git
      • Git核心概念
    • 初始配置
    • .bashrc
    • 获取本地仓库
    • 基础操作指令
      • 基础命令
      • **添加文件至忽略列表**
      • 分支
      • 查看差异
      • 变基
      • 暂时清空暂存区

初识Git

  • 为什么需要版本控制器?

简单来说,当我们修改代码后发现程序崩溃,想要回到之前的版本时,如果没有版本控制工具,就只能靠Ctrl+Z或者祈祷了🤯这时,版本控制器就像时光机一样,让我们可以自由穿梭在代码的各个版本之间,以便我们更好更安全的修改代码

  • 版本控制器
    • 集中式版本控制(SVN,CVS)
    • 分布式版本控制(Git)

  • Git就是一个分布式版本控制系统,由Linux之父Linus Torvalds在2005年创建

    • 记录每次文件的改动
    • 回到任意历史版本
    • 多人协作开发(不会互相覆盖代码)
    • 并行开发功能(分支管理,互不干扰)

    不同于SVN等集中式版本控制系统,Git的分布式架构意味着

    • 每个人电脑上都有完整的代码仓库
    • 即使服务器挂了,你仍然可以本地提交、查看历史
    • 离线也能工作,有网络时再同步

    Git会对所有文件内容进行校验和计算(使用SHA-1哈希算法),保证任何文件改动都会被检测到,所以你可以放心:只要提交到Git,数据就不会丢失或损坏

  • Git GUI: Git提供的图形界面工具

  • Git Bash:Git提供的命令行工具

Git核心概念

在开始使用Git之前,需要理解几个关键概念:

工作区 → 暂存区 → 版本库(你的文件夹)(准备提交)(永久存储)
  • 工作区:就是你电脑上能看到的项目文件夹
  • 暂存区:临时存放你的改动,决定哪些改动要提交
  • 版本库(仓库):Git存储所有版本数据的地方

Git管理的文件有三种状态

  • 已修改(modified):文件改了,但还没存到暂存区
  • 已暂存(staged):改动的文件已经添加到暂存区,等待提交
  • 已提交(committed):文件已经安全保存在版本库中

初始配置

当你第一次安装Git,需要先进行一些基本设置才能更好地使用,这些配置只需要做一次,Git会记住它们

Git的每次提交都会记录提交者的信息,想象一下团队协作时,如果不配置,别人就不知道这段代码是谁写的,出了问题也不知道找谁。所以第一件事就是告诉Git:"我是谁”,所以我们的第一步就是配置你的基础信息

  • 设置用户信息
    • git config –global user.name “”
    • git config –global user.email “”
  • 查看配置信息
    • git config –global user.name
    • git config –global user.email
  • 配置有三种级别
    • git config –local只对某个仓库有效
    • git config –global对当前用户所有仓库有效
    • git config –system对系统所有登录的用户有效

优先级:仓库配置 > 全局配置 > 系统配置(越具体的配置优先级越高

  • 显示config的配置
    • git config –list –local
    • git config –list –global
    • git config –list –system
  • 配置文件存在哪里?
    • 系统配置/etc/gitconfig
    • 全局配置~/.gitconfig~/.config/git/config
    • 仓库配置.git/config

.bashrc

.bashrcBash shell 的用户级配置文件,默认存放在用户主目录(~/.bashrcC:\Users\你的用户名\.bashrc(Git Bash)),核心作用是:

每次打开一个新的 Bash 终端窗口 / 会话时,自动执行这个文件里的命令,帮你定制终端的行为和环境

  • 定义别名

「等号前后不要有空格」是通用规范

#把 ls -l(显示详细文件信息)简化成 llaliasll='ls -l'#ls -al中-a是显示所有文件包括隐藏文件,-l是以长格式显示文件/目录详细信息但不包括隐藏文件,-al是显示所有文件的详细详细#常见的隐藏文件(以英文句号开头)示例:.bashrc(用户终端配置文件)、.gitignore(Git 忽略规则文件)、.ssh(SSH 密钥目录#输出git提交日志aliasgit-log='git log --pretty=oneline --all --graph --abbrev-commit'#把 rm 增加安全提示(避免误删)aliasrm='rm -i'#自定义 Git 快捷命令aliasgpull='git pull'aliasgpush='git push'
  • 配置环境变量
#解决乱码问题gitconfig--globalcore.quotepathfalse
#添加自定义程序路径(让系统能找到你的程序)exportPATH="$PATH:/home/你的用户名/my_program"#设置 Python 虚拟环境默认路径exportWORKON_HOME=~/.virtualenvs#设置终端编码(避免中文乱码)exportLC_ALL=en_US.UTF-8

配置PATH后,你不用输完整路径就能运行自己写的脚本 / 程序

  • 定制终端外观
#自定义提示符:显示「用户名@主机名 路径 $」PS1='\u@\h \w $'

修改后终端提示符会从默认的$变成xxx@xxx ~/code $,更直观

  • 自动执行初始化命令
#自动进入常用工作目录cd~/projects#自动激活 Python 虚拟环境source~/.venv/bin/activate#显示欢迎语/系统信息echo"欢迎回来!当前目录:$(pwd)"

每次打开终端自动运行指定命令

获取本地仓库

  1. 在电脑任意位置创建一个空目录作为本地Git仓库
  2. 进入目录,右键打开Git Bash窗口
  3. 执行命令git init
  4. 创建成功后可在文件夹看到隐藏git目录

Git 仓库本质上就是一个「包含了.git 隐藏目录的文件夹」

核心结论:Git 仓库 = 文件夹 + .git 隐藏目录

这些都是初始化成功后.git隐藏目录里的文件

⚠️注意这里的config是本地配置,由于没有单独配置所以只有【core】核心配置,没有【user】段落,全局配置在~/.gitconfig文件里

reference(引用):它是一个指向 Git 提交记录(commit)的 “指针”,相当于一个方便人类记忆的别名,让你不用记住一串长长的提交哈希值(比如a1b2c3d...),而是用一个简单的名字(比如maindev)来定位到最新的代码版本

所以整句话的意思是:当前HEAD指针正指向本地main分支的最新提交

基础操作指令

基础命令

  • git add 添加到暂存区
  • git status 查看状态
  • git commit -m “备注” 提交
  • git commit -amend 修改提交的message
  • git commit -am “” 提交

💡这是-a-m的组合参数,用于快速提交

  • m:message,直接附带提交信息,不进入编辑器

  • a:all,自动暂存所有已跟踪文件的修改(不包括新文件)

  • git mv 文件名 新文件名

  • gitk 打开当前仓库的图形历史视图 --all 查看所有分支的历史

  • git log

    • git log –all 显示所有分支
    • git log –pretty=oneline 将提交的信息显示为一行
    • git log –abbrev-commit 使得输出的commit更简短
    • git log –graph 以图的形式显示
    • git log –decorate (mac新版参数)
  • git reset –hard commitID 版本切换

  • git reset HEAD 把所有暂存区恢复到工作区

  • git checkout — 把工作区恢复成暂存区

  • git reset HEAD — 把部分暂存区恢复到工作区

  • git reflog 记录所有操作,当你回退后clear终端后可以用这个命令分析出你回退前的版本号,再进行回退
    git cat-file -t <对象id>查看 Git 仓库中「所有底层对象」的内容 / 类型 / 大小.Git 的核心底层原理 → 【万物皆对象】

    • 🤯Git 底层命令,Git 所有上层命令(git add/git commit/git branch)最终都是基于它实现的

    • 🫠「对象 ID」:就是之前在 git branch -av / git log 里看到的 一串 40 位的哈希值(commit id),Git 里叫 SHA-1 值;可以简写,前 4-6 位即可,Git 能自动识别

    • ✅tag → 标签对象:打标签时生成(比如发布版本 git tag v1.0),开发中用的少,暂时不用管

    • ✅commit → 提交对象:每一次 git commit 都会生成 1 个 commit 对象,记录「本次提交的版本信息」

    • ✅tree → 目录对象:所有文件夹 / 目录,都是 tree 对象(比如你的 docs文件夹、仓库根目录)

    • ✅blob → 文件对象:所有被 Git 追踪的文件内容,都是 blob 对象(比如你的 README.md、笔记.txt)

    • 🫨-t → 全称 --type,核心作用:查看 Git 对象的【类型】

      -t(查类型) + -s(查大小) + -p(查内容)

find .git/objects -type fLinux命令

搜索目录:.git/objects

这是 Git 仓库的核心数据库目录—— 「blob 文件对象、tree 目录对象、commit 提交对象、tag 标签对象」,所有 Git 对象最终都会以文件的形式,保存在这个目录里

  • type→ 筛选「文件 / 文件夹的类型」

f→ 是file的缩写,代表普通文件 (regular file)

如果写-type dddirectory缩写,代表「文件夹」

添加文件至忽略列表

可以在工作目录里创建一个名为**.gitignore**的文件(文 件名固定),在里面列出忽略的文件模式

# no .a files*.a# but do track lib.a, even though you are ignoring .a files above!lib.a# only ignore the TODO file in the current directory,not subdir /TODO/TODO# ignore all files in the build/directorybuild/# ignore doc/notes.txt, but not doc/server/arch.txtdoc/*.txt#ignore all .pdf files in the doc/ directorydoc/**/*.pdf

分支

  • git branch 查看分支

    git branch -av 是-a,-v简称,-a是–all,指查看所有分支包括远程分支,-v是– verbose,指显示详细信息

  • git branch 分支名 创建分支

  • git checkout 分支名(HEAD指向当前分支) 移动分支

  • git checkout -b 分支名 创建并立即切换到新分支

  • git checkout 4a2b3c0 当后面是提交哈希值的情况下,也是移动,但会进入分离头指 针的状态

💡
分离头指针

简单来说,就是你的当前工作目录没有指向一个具体的分支,而是直接指向了某次具体的提交

在这种状态下操作,主要影响体现在提交与保存方面:

  • 如果进行新的提交:新提交可以正常创建,但它们不属于任何分支
  • 切换分支时的风险:如果你此时切换到其他分支(如git checkout main),新提交就会变得很难找到。因为没有任何分支指向它们,它们最终可能会被 Git 的垃圾回收机制清理掉

它主要用于临时操作,而非长期开发:

  • 临时查看:想查看历史中某个旧版本的代码,或者验证一个 Bug 是否在特定版本存在。
  • 实验性修改:只想做一些临时尝试,不打算长期保存

如果身处该状态但发现修改很重要,立即创建一个新分支即可保护它们

在 Git 里,提交是否安全,不取决于它在哪,而取决于有没有引用(分支/标签)指向它

  • git merge 分支名 合并分支

  • git branch -d 分支名 删除分支,需要做各种检查

  • git branch -D 分支名 强制删除

  • 冲突

    • 如果同时修改了同一个文件的同一行,就要手动解决冲突

  • 开发分支规范

    • master(生产)分支
    • develop(开发)分支
    • feature/xxxx分支
    • hotfix/xxxx分支

查看差异

  • git diff 查看工作目录和暂存区的差异
  • git diff --cached / git diff --staged 查看暂存区和上次提交的差异
  • git diff abc123 def456 查看两次提交之间的差异
  • git diff HEAD 看当前文件和上一次提交的区别 HEAD~2 / HEAD^^ 查看当前文件和上上次 的区别
diff--gita/index.js b/index.js index1234567..89abcde100644--- a/index.js // --- 表示旧版本 +++ b/index.js // +++ 表示新版本 @@ -1,4 +1,4 @@ // 表示改动位置 console.log("开始");-letx=10;// - 表示删除的行 +let x=20;// + 表示添加的行 console.log("结束");

变基

把一系列提交从一个基础移动到另一个基础

交互式rebase整理提交历史

  • git rebase -i <哈希值>. 我们最好选择要进行变基提交的父亲

接下来就会出现一个交互界面

下面的注释会提示你做变更的命令信息,只需要将上面的命令进行修改即可

比如下面就是正在修改提交信息的message, 在这里我们只修改前面的pick命令

接下来会弹出新的交互面执行你要的操作,最后保存退出即可

暂时清空暂存区

当我们临时需要处理其他任务时,我们需要把现在的工作区放在一边就可以用如下命令

  • git stash

可以看到执行这个命令之后我们的工作区很干净,这个时候就可以去处理你的紧急任务了

  • git stash apply

该命令可以让之前工作区重新拿出来,并且stash列表里不会删除记录

  • git stash pop 这个会让stash列表里的一并清除
http://www.jsqmd.com/news/774393/

相关文章:

  • 质量文化的底层逻辑:规则、工具还是信仰?
  • AISMM模型如何重构产业协同效率:2024年7大头部联盟实证数据深度拆解
  • 安卓误删文件先别慌!5个实用小技巧指南教你补救
  • Linux下将Cursor AppImage封装为系统级deb包的自动化方案
  • 游戏化技能树:用human-skill-tree规划个人成长路径
  • Godot 4游戏开发模板:Takin项目架构与核心模块解析
  • 2026深度学习“炼丹”全解密:从损失函数到优化器,手把手教你驯服神经网络的“野性”
  • 2026梳妆镜供应商企业信誉好的镜子大型制造工厂推荐:智能镜出口企业哪家强?浴室镜批发厂家实力对比 - 栗子测评
  • 五面加工立卧复合加工中心生产厂家权威盘点|2026年靠谱卧式加工中心/龙门加工中心/五轴加工中心生产厂家推荐:台杨领衔 - 栗子测评
  • RepoToText:将Git仓库转换为结构化文本的实用工具
  • 2026杭州青少年心理咨询机构推荐:靠谱心理辅导机构十强榜单/专攻青少年厌学心理咨询难题 - 栗子测评
  • 数据挖掘的技术及应用
  • 第四篇 量子机器学习:重构传统大模型缺陷的全新核心解决方案
  • 4.硬件框图word可以打开但是编辑不了怎么办
  • 双十一零点扛过10倍流量洪峰:Sentinel与Redis+Lua的分布式限流深度避坑指南
  • 项目后端实现思路
  • 电动车换电柜哪家好?2026小区充电桩厂家实力分析-品牌优选二轮重卡汽车充电桩源头厂家与充电站投资运营商领军推荐 - 栗子测评
  • BAAI/bge-m3输出不稳定?随机性控制与种子设置实战技巧
  • PP搅拌罐/PP喷淋塔/PP储罐/PPH储罐生产厂家哪家好?2026国内优质厂家盘点推荐:丰亿环保领衔 - 栗子测评
  • 2026年知名的游客网红打卡智能抓拍设备/自动剪辑智能抓拍设备厂家推荐与选型指南 - 行业平台推荐
  • CloudCone 控制台显示 VPS 状态 offline 但能 ping 通为什么
  • MCP协议解析:构建AI代理与外部系统交互的标准化桥梁
  • 【Windows】批处理脚本备份文件夹:从入门到实践
  • 洛谷-算法2-5-进阶搜索4
  • 终极指南:如何让老款RTX显卡免费享受FSR3帧生成技术
  • AI镜生产厂家哪家好?2026广东化妆镜工厂推荐:广东 AI 智能镜生产企业优选:嘉瑶化妆镜团队及设备优势介绍 - 栗子测评
  • 2026年4月神泣纷争手游如何下载,无VIP无属性售卖公平竞技不氪金畅玩 - 品牌推荐师
  • 2026年比较好的游客精彩瞬间智能抓拍设备精选厂家推荐 - 品牌宣传支持者
  • AI数字人开发实战:从开源工具到多模态整合
  • 2026年中式家具拉手用户口碑推荐厂家 - 品牌宣传支持者