Git入门指南(一):从零开始,掌握Git基础操作

如果你曾经经历过"报告-最终版"、"报告-究极进化版"、"报告-打死也不改了版"的噩梦,那你一定能理解版本控制的重要性。Git就是解决这个问题的神器。

作为开源的分布式版本控制系统,Git 是程序员日常开发的必备工具,其核心价值在于高效管理文件版本、支持多人协同开发,还能轻松实现版本回退、撤销修改等操作。


一、Git是什么?为什么需要它?

1.1 问题场景

你是否有过这样的经历:写文档时为了防止丢失或改错,不断复制新文件:

  • 报告-v1.docx

  • 报告-v2.docx

  • 报告-v3.docx

  • 报告-确定版.docx

  • 报告-最终版.docx

  • 报告-究极进化版.docx

文件越来越多,你渐渐忘了每个版本改了什么。想回到某个旧版本?简直大海捞针。

写代码也是一样,项目文件成千上万,如果靠手动备份,根本不可行。

随着版本的不断增多,维护好版本是很有挑战的 。因为各自版本修改的内容需要记录起来,方便我们快速定位并且查阅!!!

1.2 版本控制器登场

版本控制器【记录每次的修改以及版本迭代的一个管理系统】 就是专门解决这个问题的工具。它可以记录一个文件的历史版本,让你随时查看改动、回退到任意时间点,还支持多人协作。

Git是目前最主流的版本控制系统,由Linux之父Linus Torvalds开发。它免费、开源、高效,几乎所有开发者都在用。

注意:Git能跟踪文本文件(如代码、txt、配置文件)的每一次改动,但对于图片、视频等二进制文件,只能记录文件大小变化,无法知道具体改了啥。

Git 的核心特性 & 注意事项

  1. 支持管理电脑上所有格式文件,对开发人员而言,核心用于管理软件开发的源代码文件;
  2. Git 只能跟踪文本文件的改动(如 TXT、网页、程序代码),能精准显示修改位置(比如第 5 行加了某个单词);
  3. 图片、视频等二进制文件,Git 仅能管理其版本(知道文件大小变化),但无法跟踪具体内容修改。

二、Git安装

Git可以在Linux、Mac、Windows上运行。下面介绍常见系统的安装方法。

2.1 Linux-CentOS(以 CentOS7.6 为例)

步骤 1:检查系统是否已安装 Git

复制代码
git

若输出-bash: git: command not found,表示未安装,执行下一步。

步骤 2:安装 Git

复制代码
sudo yum -y install git

步骤 3:验证安装 & 查看版本

复制代码
git --version

输出版本号即安装成功(如git version 1.8.3.1)。

2.2 Linux-Ubuntu(以 Ubuntu20.04 为例)

步骤 1:检查系统是否已安装 Git

复制代码
git

若输出Command 'git' not found, but can be installed with:,表示未安装。

步骤 2:安装 Git

复制代码
sudo apt-get install git -y

步骤 3:验证安装 & 查看版本

复制代码
git --version

2.3 Windows

Windows 平台安装可参考教程链接:https://www.bilibili.com/video/BV1hf4y1W7yT?p=3&vd_source=b57c3f3e8a7507d4af7322c28f05fdbc,按照视频步骤操作即可,安装完成后可在 CMD/PowerShell 中执行git --version验证。

三、创建Git本地仓库

3.1 什么是仓库?

**仓库(repository)就是Git进行版本控制的目录。**你想对哪些文件进行版本管理,就需要先创建一个仓库。

3.2 初始化仓库

在你想管理的项目目录下,执行:

git init

执行后,当前目录下会多出一个.git隐藏文件夹。这个文件夹就是Git的"大本营",里面存储了所有版本历史、配置等信息。千万不要手动修改或删除这个文件夹,否则仓库就坏了。

3.3 配置Git

安装Git后,第一件事是设置你的用户名和邮箱。这些信息会出现在每次提交记录中,让别人知道是谁改的。

复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

--global表示全局配置,这台电脑上所有仓库都使用这个信息。如果你想让某个仓库使用不同的名字/邮箱,可以去掉--global,并在那个仓库里单独配置。

查看配置

复制代码
git config -l

删除配置

复制代码
git config --global --unset user.name
git config --global --unset user.email

四、理解工作区、暂存区、版本库

4.1 三个区域

  • 工作区 :就是你电脑上能看到的目录,比如/home/zs/gitcode你在里面创建、修改、删除文件。

  • 暂存区 :也叫index,位于.git/index文件中。它是一个临时区域,你先把改动添加到暂存区,之后才统一提交到版本库

  • 版本库 :就是.git目录,里面存储了所有历史版本。当你执行git commit时,暂存区的内容才被正式保存到版本库中。

  1. Git 初始化时,会自动创建版本库的唯一默认主分支 master ,以及指向 master 分支的指针HEAD
  2. 对工作区的文件进行新建 / 修改后,执行git add命令,会将文件的改动更新到暂存区
  3. 执行git commit命令,会将暂存区 的所有内容正式写入版本库并更新 master 分支和 HEAD 指针;
  4. 仅在工作区新建 / 粘贴文件,不属于 "向仓库添加文件", 必须通过git add + git commit,才能让文件被 Git 版本库管理。

简单总结:工作区写代码 → 暂存区做暂存 → 版本库存版本

五、添加文件

5.1添加文件与提交版本

git add的常用用法:

  • git add file1 file2:添加指定文件

  • git add dir/:添加指定目录(包括子目录)

  • git add .:添加当前目录下所有改动(包括新增、修改、删除)

5.2 提交暂存区内容到版本库

复制代码
git commit -m "commit my first file"

-m后面跟的是本次提交的说明信息,一定要写清楚改了什么,方便以后查看。

执行后,Git会告诉你本次提交的摘要:

master (root-commit) c614289\] commit my first file 1 file changed, 2 insertions(+) create mode 100644 ReadMe

5.3 一次提交多个文件

复制代码
$ touch file1 file2 file3
$ git add file1
$ git add file2
$ git add file3
$ git commit -m "add 3 files"

这样,三个文件都被提交了。

5.4 查看提交历史

  • 使用git log查看历史记录
  • 如果想更简洁地看,加上**--pretty=oneline:**

那一长串十六进制数字就是commit id(版本号),是Git根据内容用SHA1算法计算出来的唯一标识。

5.5 注意事项


git add 是将问件添加到暂存区, git commit 是将暂存区的内容添加到本地仓库中。由于我们并没有使用 git add file5 ,file5 就不在暂存区中维护,所以我们 commit 的时候其实只是把已经在暂存区的 file4 提交了,而遗漏了工作区的 file5。如何提交 file5 呢?很简单,再次add , commit 即可。

六、.git 目录

  • index:就是暂存区,git add后内容更新在这里。

  • HEAD:默认指向master分支的一个指针

  • refs/heads/master: 文件保存当前master分支最新commit id

  • objects : 包含了创建的各种版本库对象以及内容,可以以理解为,放了git维护的所有修改

HEAD:指向当前分支的指针。查看它:

复制代码
$ cat .git/HEAD
ref: refs/heads/master

refs/heads/master:保存master分支当前指向的commit id。

复制代码
$ cat .git/refs/heads/master
23807c536969cd886c4fb624b997ca575756eed6

这个id就是最新的提交。

objects/:存放所有文件内容、提交对象、树对象等。每个对象以哈希值的前两位作为文件夹名,后38位作为文件名。该类文件是经过sha(安全哈希算法)加密过的文件

  • objects 为git 的对象库 ,里面包含了创建的各种版本库对象及内容。**当git add命令时,暂存区的目录树被更新,**同时工作区【修改】或新增的文件内容被写入到对象库中的一个新对象中,就位于 ".git/objects"目录下:

6.1 查看对象的内容

git cat-file -p查看对象的内容。

例如,查看某个commit对象:

复制代码
$ git cat-file -p 23807c536969cd886c4fb624b997ca575756eed6
tree 830a8c9feefbdc098bbae2cdc25e5034ce1920d7
parent c61428926f3853d4ec6dde904415b0e6c1dabcc6
author hyb91 <2689241679@qq.com> 1683343652 +0800
committer hyb91 <2689241679@qq.com> 1683343652 +0800

add 3 files

接着查看tree对象:

复制代码
$ git cat-file -p 830a8c9feefbdc098bbae2cdc25e5034ce1920d7
100644 blob 9c9e1f0f6bff3015df71a0963004476f5e6cfd54 ReadMe
100644 blob e69de29bb2d1d6434bb29ae775ad8c2e48c5391 file1
100644 blob e69de29bb2d1d6434bb29ae775ad8c2e48c5391 file2
100644 blob e69de29bb2d1d6434bb29ae775ad8c2e48c5391 file3

再看ReadMe对应的blob对象:

复制代码
$ git cat-file -p 9c9e1f0f6bff3015df71a0963004476f5e6cfd54
hello git
hello git

原来文件内容就存在这里。Git正是通过这种方式保存每个版本的快照

相关推荐
_君莫笑42 分钟前
大厂Git使用规范
git
无心水7 小时前
【Hermes:安全、权限与生产环境】39、智能体也会犯错?Hermes 纠错、回滚与遗忘机制全指南 —— 让 AI 的错误像 Git 一样可逆可控
人工智能·git·安全·mcp协议·openclaw·hermes·honcho
南境十里·墨染春水12 小时前
linux学习进展 git详解
linux·git·学习
zhangfeng113312 小时前
CodeBuddy ai对话框上面的git docs terminal Rulds 干嘛用的,以thinkphp fastadmin 为例,插件市场
人工智能·git·编程
OYangxf13 小时前
Git Conflict Resolution
大数据·git·elasticsearch
高斯林.神犇13 小时前
Git全套流程
git
次元工程师!16 小时前
LangFlow开发(一)—安装和部署
git·python·大模型·langflow
怣疯knight16 小时前
【无标题】
git
Jim-zf16 小时前
git 锁文件
git
lcx_defender16 小时前
Git常见操作与指令
git