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正是通过这种方式保存每个版本的快照

相关推荐
吴声子夜歌1 天前
TypeScript——泛型
前端·git·typescript
春日见1 天前
3三分彻底了解Git Graph极其应用
git
风.foxwho1 天前
jenkins使用 ED25519密钥 拉取Git 代码 配置
git·servlet·jenkins
ruanCat1 天前
前端工程化工具链从零配置:simple-git-hooks + lint-staged + commitlint
前端·git·代码规范
木子小喵1 天前
Git的使用介绍!超通俗!
git
coderYYY1 天前
git push报错Authentication failed for ‘xxx’也不会弹要求输入用户名密码的最终解决方法
前端·git·gitee·github
@PHARAOH1 天前
WHAT - git worktree 开发的并发模型
大数据·git·elasticsearch
苦瓜小生1 天前
【Git】| 将拉下来的代码上传到自己的 Gitee 仓库(手把手教学)
git·gitee
WKP94181 天前
git的merge和rebase操作
git
___波子 Pro Max.1 天前
Git 分支切换
git