Git 入门:环境配置、核心概念与文件操作
前言
在开发过程中,为了防止文档丢失或因修改失误导致无法恢复,我们往往需要频繁复制副本(如 报告-v1、报告-最终版)。随着版本增多,管理成本急剧上升。版本控制系统应运而生,它能记录工程的每一次改动和迭代,方便多人协同作业。
目前最主流的版本控制工具是 Git。它不仅能管理源代码,还能处理各种格式的文件。需要注意的是,Git 主要跟踪文本文件的改动(如代码、配置文件),对于图片、视频等二进制文件,虽然能管理,但无法追踪具体内容的变化,只能记录文件大小或哈希值的差异。
环境安装与配置
Git 支持 Linux、Unix、Mac 和 Windows 平台。以 Ubuntu 20.04 为例,安装步骤如下:
- 检查是否已安装:
$ git --version
若提示未找到命令,系统通常会给出安装建议。
- 安装 Git:
sudo apt-get install git -y
- 验证安装:
git --version
初始化本地仓库
仓库是进行版本控制的目录。使用 git init 在当前目录下创建 Git 仓库:
lighthouse@VM-8-10-ubuntu:gitcode$ git init
Initialized empty Git repository in /home/lighthouse/code/gitcode/.git/
执行后,当前目录会生成一个隐藏的 .git 目录,这是 Git 的核心,包含所有版本信息。切勿手动修改该目录下的文件,否则可能导致仓库损坏。
注意:初始化时可能会提示默认分支名为
master,建议全局设置默认分支为main或保持master以避免警告:git config --global init.defaultBranch master
用户配置
首次使用前,必须设置用户名和邮箱,这用于标识提交记录:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
--global 参数表示配置对所有仓库生效。如需查看配置,可使用 git config -l;删除配置则用 --unset。
核心概念:三态模型
理解 Git 的工作流程,关键在于掌握三个区域的状态流转:
- 工作区 (Working Directory):你在电脑上编辑代码的目录。
- 暂存区 (Stage/Index):存放在
.git/index中,用于存放准备提交的更改。 - 版本库 (Repository):即
.git目录,存储所有历史版本和对象。

当你对文件执行 git add 时,更改从工作区进入暂存区;执行 git commit 时,暂存区的更改被写入版本库。Git 会自动创建一个 master 分支和一个指向它的指针 HEAD。
文件操作实战
添加与提交
在 .git 目录下新建文件后,使用 git add 将其加入暂存区:
git add [file1] [file2]...
git add . # 添加当前目录下所有改动
随后提交到本地仓库:
git commit -m "描述本次提交的内容"
提示:
-m后的消息非常重要,它是给人类看的提交说明,应清晰描述改动意图。
提交成功后,可用 git log 查看历史记录:
git log --pretty=oneline
每个提交都有一个唯一的 SHA1 哈希值作为 ID,并非简单的数字递增。
深入 .git 目录结构
.git 目录是 Git 的心脏,主要包含以下关键部分:
- objects:存储所有对象(文件内容、目录结构、提交信息)。对象通过 SHA1 哈希命名,分为 blob(文件内容)、tree(目录结构)和 commit(提交记录)。
- refs:存储引用指针,如分支 (
heads) 和标签 (tags)。 - HEAD:指向当前所在分支的指针。
- index:暂存区的二进制表示。
- logs:记录引用的变更历史,配合
git reflog可找回误删的提交。
例如,查看某个提交对象的详细信息:
git cat-file -p <commit_id>
这会显示作者、时间戳及关联的 tree 对象。通过递归查看 tree 和 blob,可以还原当时的文件状态。
修改与撤销
Git 跟踪的是'修改'而非文件本身。要查看工作区与暂存区的差异,使用 git diff:
git diff [file]
若发现工作区代码有误,且尚未 add,可直接丢弃修改:
git checkout -- [file]
注意:
--不能省略,否则命令含义可能改变。此操作不可逆,请谨慎使用。
如果已经 add 但未 commit,想撤销暂存区的更改,可使用 reset:
git reset HEAD [file]
这将把文件从暂存区移回工作区,之后再用 git checkout -- [file] 丢弃工作区修改即可。
版本回退
当发现之前的提交有问题,可以使用 git reset 回退版本。语法为:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed(默认):回退暂存区,保留工作区修改。--soft:仅回退版本库指针,暂存区和工作区保持不变。--hard:彻底回退,暂存区和工作区均恢复到指定版本。慎用,未提交的代码将丢失。
示例:回退到上一个版本
git reset --hard HEAD^
若忘记具体的 commit id,可通过 git reflog 查找本地所有的操作记录:
git reflog
它会列出 HEAD 指针的移动历史,即使 commit id 被重置也能找回。
删除文件
在 Git 中,删除也是一种修改。直接 rm 文件只会删除工作区文件,Git 仍认为文件存在。正确做法是:
git rm [file]
git commit -m "delete file"
若误删了工作区文件,可使用 git checkout -- [file] 恢复。
总结
Git 的强大在于其分布式特性和灵活的版本管理能力。掌握工作区、暂存区、版本库的流转逻辑,熟练运用 add、commit、reset 等核心命令,能有效提升开发效率并降低协作风险。在实际操作中,务必注意 --hard 回退的风险,善用 reflog 作为安全网。


