git本地版本控制简介

目录

认识版本控制

为什么需要版本控制?

版本控制工具具备的功能

版本控制工具对比

Git与代码托管中心

Git本地结构

Git本地库操作命令

首次使用配置

基本操作

版本管理

文件找回

.gitignore配置

注意事项

后续进阶学习


认识版本控制

为什么需要版本控制?

个人

  • 自由回滚:改崩代码、误删时快速恢复历史版本;
  • 思路回溯:每步提交时添加注释明确迭代,便于复盘和维护;
  • 规范管理:控制提交内容,过滤冗余文件,保持项目结构清晰。

团队

  • 避免多人修改同一文件时的覆盖冲突,多人可以协同修改。

版本控制工具具备的功能

  • 协同修改:多人同时操作同一项目,互不干扰;
  • 数据备份:版本记录相当于代码备份,防止文件丢失;
  • 版本管理:记录修改操作,支持任意版本的前进与后退;
  • 权限控制:团队场景下可限制不同成员的操作权限;
  • 历史记录:查看修改人、修改时间、修改内容,便于追溯;
  • 分支管理:隔离开发功能、修复bug,不影响主版本。

版本控制工具对比

类型 代表工具 特点 适用场景
集中式 SVN 依赖中央服务器,单点故障风险 团队强管控场景
分布式 Git 本地完整版本库,无需联网操作 个人开发、灵活协作

Git与代码托管中心

维度 Git 代码托管中心(如局域网环境下的GitLab、外网场景下的GitHub、Gitee)
本质 分布式版本控制系统(本地工具) 基于 Git 协议的远程服务平台(在线服务)
运行环境 安装在开发者本地电脑(Windows/macOS/Linux) 部署在云端服务器(或企业私有服务器)
角色 管理本地代码的 "版本记录器 + 分支工具" 连接多开发者的 "远程仓库 + 协作中枢"
依赖关系 可独立运行(无需联网) 依赖 Git 协议,需配合本地 Git 使用

Git本地结构

  • 工作区:本地项目文件夹,日常编写、修改文件的直接操作区(就是我们见到的文件目录);
  • 暂存区:临时存储待提交修改;
  • 本地库:存储所有提交记录的版本仓库;

Git本地库操作命令

首次使用配置

  • 本地库初始化

    在项目根目录执行,生成隐藏的.git目录,标志本地库创建成功

    git init

  • 签名设置:用于标识开发人员身份,不需正确,与远程库的账号密码无关联,优先级:项目级别 > 系统用户级别(冲突时以项目级别为准)。

    1. 项目级别(仅当前项目生效)

    git config user.name "你的用户名" # 如"Lown"
    git config user.email "你的邮箱" # 如"Lownn@xxx.com"

    配置文件路径:项目根目录/.git/config

    2. 系统用户级别(所有本地库通用,推荐优先设置)

    git config --global user.name "你的用户名"
    git config --global user.email "你的邮箱"

    配置文件路径:用户家目录/.gitconfig(Windows:C:\Users\用户名;Mac/Linux:~/.gitconfig)

    验证配置是否生效

    git config --list # 查看所有生效的Git配置

基本操作

  • 查看状态

    查看工作区、暂存区的文件状态(新增、修改、删除等)

    git status

几个状态:

未跟踪:新创建的文件,未加入版本控制;

已修改未暂存:文件修改后未执行git add;

已暂存未提交:文件已加入暂存区,未执行git commit;

无文件可提交:工作区、暂存区与本地库一致。

  • 添加至暂存区

    1. 添加文件到暂存区

    git add 文件名 # 单个文件(如git add main.py
    git add 文件名1 文件名2 # 多个文件(空格分隔)
    git add . # 所有修改文件批量添加(推荐,效率最高)
    git add 目录名 # 整个目录的文件(如git add src/)

    2. 从暂存区移除文件(原文件保留在工作区,仅取消暂存)

    git rm --cached 文件名 # 如git rm --cached test.py

  • 提交到本地库

    1. 提交暂存区文件到本地库(进入vim编辑器写提交说明,按i编辑,:wq保存退出)

    git commit 文件名

    2. 直接带提交说明(推荐,无需进入vim)

    git commit -m "提交说明" # 提交暂存区所有文件
    git commit -m "提交说明" 文件名 # 提交指定文件

    3. 跳过暂存区直接提交(仅修改已提交过的文件时可用)

    git commit -a -m "提交说明"

提交说明规范

feat:新增功能(如feat: 新增用户登录接口);

fix:修复 bug(如fix: 修复数据校验失败问题);

docs:文档更新(如docs: 补充接口使用说明);

refactor:代码重构(如refactor: 优化循环逻辑);

style:格式调整(如style: 调整代码缩进)。

  • 查看修改差异

    git diff # 查看工作区与暂存区所有文件的差异
    git diff 文件名 # 查看单个文件的修改细节(如git diff main.py
    git diff --cached 文件名 # 查看暂存区与本地库的差异(需先执行git add)

版本管理

  • 查看版本记录

    git log # 显示完整版本信息(哈希值、作者、时间、提交说明)
    git log --pretty=oneline # 一行显示(完整哈希值+提交说明)
    git log --oneline # 精简显示(哈希值前7位+提交说明),仅显示当前版本及之前记录
    git reflog # 显示所有版本(包括已回滚的版本),标注回到当前版本需几步(HEAD@{n})

多屏查看控制:空格 = 向下翻页、b = 向上翻页、q = 退出查看。

  • 版本切换方法
切换方式 命令示例 适用场景
基于哈希值(推荐) git reset --hard 哈希值(如 git reset --hard a3f2e1d) 任意版本前进 / 后退(精准)
基于 ^ 符号 git reset --hard HEAD^(一个 ^ 退 1 步) 仅后退,步数少(≤3 步)
基于~符号 git reset --hard HEAD~3(退 3 步) 仅后退,步数较多

注意:git reset --hard会直接覆盖工作区、暂存区和本地库,执行前建议用git reflog记录当前版本哈希值,防止回滚后想恢复却找不到索引。

文件找回

  • 删除文件前已提交到本地库(执行了git commit)

    git reset --hard 删除前的版本哈希值(通过git reflog查找目标版本)

  • 删除文件后加入暂存区但未提交(执行了git add)

    git reset --hard HEAD(刷新工作区,恢复文件)

仅当文件 "已提交到本地库" 时,Git 能 100% 找回;

若文件未add也未commit,误删后 Git 无法恢复,需依赖系统回收站或文件恢复工具。

.gitignore配置

作用:.gitignore 是一个 "黑名单文件",把不需要 Git 跟踪(即不纳入版本控制)的文件 / 目录写进去,Git 就会自动忽略它们:不会显示在 git status 的 "未跟踪文件" 里;不会被 git add 命令添加到暂存区;不会被提交到本地库,也不会出现在版本记录里。

  • 在项目根目录新建文件,命名为.gitignore(Windows 需注意:新建文本文件后,重命名时删除 ".txt" 后缀,确保文件名仅为.gitignore);

  • 复制通用配置模板(根据开发语言调整):

    操作系统临时文件

    .DS_Store
    Thumbs.db

    编译产物

    *.class
    dist/
    build/
    target/

    依赖包目录

    node_modules/
    venv/
    env/
    lib/
    lib64/

    缓存文件

    pycache/
    *.pyc
    *.pyo
    *.log
    *.swp
    *.swo

    IDE配置文件

    .idea/
    .vscode/
    *.suo
    .ntvs
    *.njsproj
    *.sln
    *.db

    大文件(根据需求添加)

    *.csv
    *.zip
    *.rar
    *.iso

  • 生效验证

    配置后执行,确认被忽略文件不显示"未跟踪"或"已修改"

    git status

    若已执行git add将忽略文件加入暂存区,需先移除再生效

    git rm --cached 被忽略的文件名 # 如git rm --cached node_modules/

注意事项

  • 提交频率:每完成一个独立功能(如 "完成登录逻辑")或修复一个 bug,就提交一次,避免大量修改一次性提交(回滚时难以定位);
  • 提交说明:务必清晰描述修改内容,拒绝 "修改代码""fix bug" 等模糊表述;
  • 谨慎操作:git reset --hard和git checkout -- 文件名会直接覆盖文件,执行前确认无需保留当前修改;
  • 配置备份:系统级签名配置仅需设置一次,后续所有本地库通用;若需区分不同项目身份,再设置项目级签名。
相关推荐
摇滚侠1 小时前
零基础小白自学Git_Github教程,GitHubDeskTop安装,笔记10
笔记·git·github
摇滚侠1 小时前
零基础小白自学 Git_Github 教程,GitHub 是如何工作的,笔记08
笔记·git·github
小Lu的开源日常2 小时前
如何将 GitHub 仓库从个人账户转移到组织账户
git·开源·github
芒克芒克2 小时前
《Git 入门:从概念到环境准备》
git
我就是程序猿2 小时前
Git的操作
git
洒家肉山大魔王2 小时前
Git && IDE 对长路径支持不足 导致 文件被“误判”不存在
git·idea
摇滚侠2 小时前
零基础小白自学Git_Github教程,Git 与 GitHub 的历史起源,笔记05
笔记·git·github
摇滚侠3 小时前
零基础小白自学 Git_Github 教程,Git 分支概念,笔记07
笔记·git·github
摇滚侠3 小时前
零基础小白自学 Git_Github 教程,仓库的其它功能,笔记09
笔记·git·github