4、Git基础操作(一):git init、git clone、git status、git add、git commit,以及.gitignore文件的使用

说实话,很多新手学Git,一上来就被各种概念砸晕了。什么暂存区、工作区、HEAD指针……其实你想想看,Git最核心的操作就那么几个。今天我就带你把这几个最常用的命令彻底搞明白。

我个人习惯,每次教新人Git,都先让他们把下面这张图刻在脑子里。这是Git最基础的工作流程,搞懂它,后面就顺了。

Git 基础操作核心流程 工作区 (Working Directory) 你正在编辑的文件夹 git status 查看状态 暂存区 (Staging Area) 准备提交的临时区域 git add 放入暂存区 本地仓库 (Repository) Git 保存历史版本的地方 git commit 提交到仓库 git add git commit 关键命令速查 • git init —— 初始化一个新仓库(创建 .git 文件夹) • git clone —— 从远程复制一个已有仓库到本地 • git status —— 查看当前工作区和暂存区的状态 • .gitignore —— 告诉 Git 哪些文件不需要跟踪

4.1 从零开始:git init

你想在一个新项目里用Git,第一步就是初始化。说白了,就是告诉Git:「嘿,这个文件夹归你管了」。

mkdir my-project
cd my-project
git init

执行完 git init 之后,Git会在当前目录下创建一个隐藏的 .git 文件夹。这个文件夹里存着所有版本历史、配置信息等。我见过有人不小心把这个文件夹删了,结果整个版本历史全丢了……嗯,这里要注意,.git 文件夹就是Git的命根子,别乱动。

💡 我的小习惯: 每次新建项目,我第一件事就是 git init 然后立刻 git add .git commit -m "Initial commit"。这样从一开始就有版本记录,后面改了什么一目了然。

4.2 拿来主义:git clone

如果别人已经建好了仓库,你想参与进来,那就用 git clone。这就像从网盘下载一个文件夹,但Git会把这个文件夹的「前世今生」都下载下来。

git clone https://github.com/username/repository.git

这个命令会做三件事:

  • 在当前目录下创建一个同名文件夹(比如 repository
  • 把远程仓库的所有文件下载下来
  • 自动初始化本地仓库,并关联远程地址

我曾经遇到过一个问题:克隆一个超大的项目,结果等了半天没反应。后来发现是网络问题。如果你也遇到这种情况,可以试试 git clone --depth 1,这个参数只克隆最近一次提交,速度快很多。当然,代价是你拿不到完整的历史记录。

4.3 随时查看状态:git status

这个命令我一天能用几十次。它告诉你当前仓库里发生了什么变化。说白了,就是Git的「体检报告」。

git status

输出结果大概长这样:

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        new-style.css

看到 modified 表示文件被改了但还没暂存,Untracked files 表示Git完全不认识这些新文件。我建议你养成习惯:每次提交前先 git status 看一眼,确认自己改了什么,别稀里糊涂就提交了。

⚠️ 注意: git status 只显示「有变化」的文件。如果你改了一个文件又改回去了,Git会认为没有变化,不会显示。别问我怎么知道的……有一次我改了半天代码,发现 git status 显示 nothing to commit,当时就懵了。

4.4 把改动装进篮子:git add

你改好了代码,但Git不会自动跟踪这些改动。你需要用 git add 把文件「放上暂存区」。你可以把它想象成一个购物车——你先挑好要买的东西(改动的文件),然后统一结账(提交)。

# 添加单个文件
git add index.html

# 添加所有改动(包括新文件和修改)
git add .

# 添加当前目录下所有 .js 文件
git add *.js

我个人习惯用 git add . 比较多,但有个坑:如果你不小心把一些临时文件、日志文件也加进去了,后面提交就会很乱。所以,我建议你配合 .gitignore 文件一起使用,后面会讲到。

4.5 正式存档:git commit

git commit 就是把暂存区的内容正式保存到本地仓库。每次提交都会生成一个唯一的哈希值(比如 a1b2c3d),这就是你这次改动的「身份证」。

git commit -m "修复了登录页面的样式问题"

关于提交信息,我有几条铁律:

  • 用中文写清楚:别写什么「fix bug」这种废话,要写「修复了用户头像加载失败的问题」
  • 一句话说清楚:控制在50字以内,如果说不清楚,说明这次改动太大了,应该拆成多次提交
  • 用现在时:比如「修复」而不是「修复了」,这是Git社区的惯例
🌟 我的经验: 有一次我提交了200多个文件的改动,提交信息只写了「大更新」。结果两周后回来看,完全想不起来改了啥。从那以后,我坚持每次提交只改一个功能,信息写清楚。你想想看,如果半年后你回来查一个bug,看到「修复了xxx问题」是不是比「update」好一万倍?

4.6 眼不见为净:.gitignore 文件

项目里总有一些文件不需要Git管理,比如:

  • node_modules/ —— 依赖包,几万个文件
  • .env —— 环境变量,可能包含密码
  • *.log —— 日志文件,每天都在变
  • dist/ —— 构建产物,可以重新生成

这时候就需要 .gitignore 文件了。它告诉Git:「这些文件你别管,就当它们不存在」。

# 忽略 node_modules 文件夹
node_modules/

# 忽略所有 .log 文件
*.log

# 忽略 .env 文件(但保留 .env.example)
.env
!.env.example

# 忽略 dist 文件夹
dist/

创建 .gitignore 文件很简单,在项目根目录新建一个文本文件,命名为 .gitignore 就行。我建议你从网上找一个模板,比如 GitHub 上就有各种语言的 .gitignore 模板,直接复制过来改改就能用。

⚠️ 重要提醒: .gitignore 只对「还没被Git跟踪」的文件有效。如果你已经 git add 了一个文件,再把它加到 .gitignore 里是没用的。我曾经犯过这个错——把密码文件提交了,然后才加 .gitignore,结果密码还在历史记录里。正确的做法是用 git rm --cached 先移除跟踪。

4.7 实战演练:一个完整的流程

说了这么多,我们来走一遍完整的流程。假设你刚接手一个新项目:

# 1. 克隆项目
git clone https://github.com/team/project.git

# 2. 进入项目目录
cd project

# 3. 查看当前状态(确认干净)
git status

# 4. 创建 .gitignore(如果项目里没有)
echo "node_modules/" >> .gitignore
echo ".env" >> .gitignore

# 5. 开始写代码... 改完了之后
git status  # 看看改了哪些文件

# 6. 添加改动
git add .

# 7. 再次确认状态
git status  # 应该显示绿色文字,表示已暂存

# 8. 提交
git commit -m "完成了用户登录功能"

# 9. 推送到远程(后面章节会详细讲)
git push

这个流程我每天都在用。你刚开始可能会觉得麻烦,但用顺手了就会发现——每一步都有它的道理。

💡 避坑指南: 我曾经在 git add . 之后忘了 git status 确认,结果把一个包含API密钥的配置文件也提交了。虽然马上 git reset 撤销了,但想想都后怕。所以,git status 真的是你的好朋友,多用它。

好了,这一章的内容就到这里。这几个命令是Git操作的基石,你花点时间把它们练熟,后面学分支、合并、远程协作就会轻松很多。记住那张流程图,每次操作前在脑子里过一遍:我现在在哪个区?我要把文件送到哪里去?