Git 教程(详细教程)

什么是 Git?初学者必须搞懂的版本控制工具

在软件开发的世界里,代码就像你每天写的工作文档。你写完一段功能,可能发现逻辑有问题,想回退到前一天的版本。如果没有工具帮忙,只能靠复制粘贴,一不小心就搞乱了。这就是 Git 出现的意义——它是一个分布式版本控制系统,让你可以像“时间机器”一样,随时回退、对比、管理代码的每一次变化。

想象一下,你正在写一个博客系统,今天加了评论功能,明天发现引入了新 bug。Git 就像一个自动备份的日记本,每当你提交一次代码,它就记下“今天加了评论模块”这样的记录。你随时可以翻看历史,甚至回到某个特定状态。

Git 并不是 GitHub 或 Gitee 这类平台,而是底层的工具。GitHub 是基于 Git 的代码托管平台,就像你把 Git 的“日记本”上传到云端共享。学会 Git,你才能真正掌控代码的生命周期。

安装 Git 与初始化项目

在开始之前,你需要在本地安装 Git。你可以从官网下载:https://git-scm.com/download

安装完成后,打开终端(命令行工具),运行以下命令检查是否安装成功:

bash git --version

如果显示版本号,比如 git version 2.40.1,说明安装成功。

接下来,我们创建一个项目文件夹,并初始化 Git 仓库:

bash mkdir my-blog-project cd my-blog-project git init

执行 git init 后,Git 会在当前目录下创建一个隐藏文件夹 .git,它就是整个版本控制的“大脑”。所有提交、分支、历史记录都保存在这里。

💡 小贴士:.git 文件夹不要手动修改,它是 Git 的核心数据库,一旦损坏可能导致数据丢失。

第一次提交:从工作区到暂存区再到仓库

Git 的工作流程分为三个区域:工作区暂存区(stage)和 本地仓库(repository)。

  • 工作区:你正在编辑的文件
  • 暂存区:准备提交的文件集合
  • 本地仓库:已经正式保存的版本历史

我们来通过一个实际例子演示这个过程。

创建一个 index.html 文件,内容如下:

html

我的博客

欢迎来到我的博客

这是第一篇博文。

现在,运行以下命令查看当前状态:

bash git status

输出会显示:Untracked files,表示这个文件还没有被 Git 管理。

接下来,用 git add 命令把文件加入暂存区:

bash git add index.html

这一步相当于“把要提交的文件放进待提交篮子”。现在再运行 git status,你会看到文件状态变为 “Changes to be committed”,说明它已经在暂存区。

最后,执行提交操作,把暂存区的内容永久保存到本地仓库:

bash git commit -m "添加首页 HTML 结构"

  • -m 参数用于添加提交信息(commit message),这是非常重要的!
  • 提交信息要清晰说明本次更改的目的,比如“修复登录页按钮样式”或“新增用户注册功能”

📌 提交信息规范建议:

  • 用动词开头(如 add、fix、update)
  • 限制在 50 字以内
  • 不加句号,避免大写开头(除非是专有名词)

查看提交历史与对比差异

当你写了多个版本后,如何知道谁改了什么?Git 提供了强大的命令来查看历史。

运行以下命令查看提交记录:

bash git log

输出示例:

commit a1b2c3d4e5f678901234567890abcdef12345678 Author: Zhang San zhangsan@example.com Date: Mon Apr 5 10:30:00 2025 +0800

添加首页 HTML 结构

这个记录包含了提交的哈希值(commit ID)、作者、时间以及提交信息。

如果你想看更简洁的输出,可以加 --oneline 参数:

bash git log --oneline

输出为一行一条,比如:

a1b2c3d 添加首页 HTML 结构

更进一步,你可以查看某次提交的具体修改内容。假设你修改了 index.html,想看看哪里变了:

bash git diff

这会显示工作区与暂存区之间的差异。如果你已经提交,想看与上一次提交的差异:

bash git diff HEAD

  • HEAD 指向当前最新的提交
  • 这个命令常用于确认修改是否正确

分支管理:像多线程一样开发

在大型项目中,多个开发者可能同时开发不同功能。比如你正在做用户登录模块,同事在做文章分类功能。如果直接在主分支(main)上改,容易互相干扰。

Git 的分支机制就是为了解决这个问题。你可以创建一个新分支,专门开发某个功能,完成后合并回主分支。

创建并切换分支

创建一个名为 feature/login 的分支:

bash git branch feature/login

这一步只是创建了分支,但你仍在原来的分支上。要切换过去,运行:

bash git checkout feature/login

或者更简洁的写法(Git 2.23+ 支持):

bash git switch feature/login

💡 小技巧:用 git branch 查看当前所有分支,带 * 的是当前所在分支。

在分支中开发

现在你在 feature/login 分支上,可以自由修改代码。比如添加 login.html:

html

用户登录

添加并提交:

bash git add login.html git commit -m "添加登录页面"

此时,主分支(main)还看不到这些改动,因为它们只存在于 feature/login 分支。

合并分支

当功能完成,准备合并到主分支:

  1. 切换回 main 分支:

    bash git switch main

  2. 合并 feature/login 分支:

    bash git merge feature/login

Git 会自动把两个分支的更改合并在一起。如果无冲突,就完成了。

如果出现冲突(比如两个分支都修改了同一行代码),Git 会提示你手动解决。这时需要打开文件,找到冲突标记(<<<<<<<、=======、>>>>>>>),保留正确的代码,然后提交。

推送到远程仓库:让代码“上云”

你本地的 Git 仓库只是备份,真正要协作,需要推送到远程服务器。GitHub、Gitee、GitLab 都是常见的远程仓库平台。

添加远程仓库地址

假设你已经在 GitHub 上创建了一个名为 my-blog-project 的仓库,获取它的 HTTPS 地址(如 https://github.com/yourname/my-blog-project.git)。

在本地项目中添加远程仓库:

bash git remote add origin https://github.com/yourname/my-blog-project.git

  • origin 是远程仓库的别名,可以自定义,但通常用 origin

推送代码

首次推送需要指定分支:

bash git push -u origin main

  • -u 参数会建立本地分支与远程分支的关联,后续只需 git push 就行
  • 第一次推送后,其他开发者就可以克隆你的项目了

⚠️ 注意:如果你的远程仓库是私有的,记得配置 SSH 密钥或使用个人访问令牌(PAT)

常见问题与最佳实践

问题 解决方法
忘记提交,代码改错了 使用 git checkout -- <file> 恢复文件
提交了不该提交的文件(如 .log) git reset HEAD <file> 移出暂存区,再 git add 重新选择
误删了分支 查看 git reflog 找到分支的 commit ID,重建分支
提交信息写错了 git commit --amend 修改最后一次提交

最佳实践建议:

  • 每次提交只做一件事(单一职责)
  • 保持提交信息清晰、有上下文
  • 定期推送代码到远程仓库,避免本地丢失
  • 使用 .gitignore 忽略临时文件(如 .log、node_modules)

Git 教程的核心不在于记住命令,而在于理解“版本控制”的思维。当你把每一次修改都当作一次“时间点”的记录,开发就变得有条不紊。

从今天开始,把 Git 用起来。它不会让你立刻变牛,但它会让你的代码更安全、协作更高效。当你第一次用 git log 看到自己的提交历史,那种掌控感,真的很棒。