Git 入门以及常用命令介绍

1. Git 是什么?

1.1 为什么需要版本控制

在软件开发或文档写作中,我们经常需要面对以下问题:

  • 不小心删除了重要代码,希望能恢复。
  • 想对比当前版本与三天前的版本有何不同。
  • 多人协作时,如何安全地合并各自修改的代码。
  • 需要同时维护一个稳定版和一个正在开发的新功能版。

版本控制系统(Version Control System, VCS)正是为解决这些问题而设计的。它能够记录文件内容随时间变化的每一个版本,方便您随时查看历史记录或回退到某个特定版本。

1.2 Git 的核心优势:分布式

Git 是一款免费、开源的分布式版本控制系统。与集中式系统(如 SVN)不同,Git 的主要特点是“分布式”。

  • 集中式:所有开发者都从一个中央服务器拉取(check out)代码,并向其提交(commit)代码。如果中央服务器宕机,所有人都无法协作。
  • 分布式:每个开发者都拥有一个完整的代码仓库(repository),包含全部的提交历史。开发者可以在本地进行提交、创建分支、查看历史等绝大部分操作,无需联网。协作时,再将本地的修改推送(push)给团队约定的共享远程仓库(例如 GitHub 上的仓库)。

2. 核心概念:理解 Git 的工作模式

2.1 三个区域:工作区、暂存区、本地仓库

要真正理解 Git,必须先理解它的三个核心区域。这是 Git 所有操作的基础。

![[需配图:Git 三个区域工作流示意图。图示应包含“工作区(Working Directory)”、“暂存区(Staging Area)”、“本地仓库(Local Repository/.git)”,并用箭头清晰标出 git addgit commit 命令如何使文件在这三个区域之间流转。]]

  1. 工作区 (Working Directory):您在电脑上能直接看到并编辑的文件和文件夹。这是您进行实际工作的区域。
  2. 暂存区 (Staging Area):一个临时的存储区域,用于存放您“打算”在下一次提交中包含的变更。它像一个待办事项清单,让您精确控制每次提交要包含哪些内容。
  3. 本地仓库 (Local Repository):当您执行提交操作后,暂存区的内容会被永久性地记录到本地仓库中,形成一个新的版本快照。这个仓库位于您项目文件夹下的一个隐藏目录 .git 中。

基本工作流
① 在工作区修改文件 → ② 使用 git add 将修改的快照添加到暂存区 → ③ 使用 git commit 将暂存区的内容提交到本地仓库

2.2 对象的快照(Snapshot)

Git 关心的是文件内容,而不是文件名。每次提交时,Git 主要是为全部文件制作一个“快照”,并存储一个指向该快照的引用。如果文件没有变化,Git 不会重复存储,而是只保留一个指向上一次存储版本的链接。

3. 初始设置与配置

3.1 安装 Git

请访问 Git 官方网站 下载对应您操作系统的安装包并完成安装。安装后,可以在终端或命令行工具中验证是否成功:

1
git --version

3.2 首次配置

在开始使用前,您需要设置您的用户名和邮箱地址。这些信息会嵌入到您的每一次提交中。

1
2
git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"

--global 参数表示这台机器上的所有 Git 仓库都会使用这个配置。

4. 本地仓库:核心工作流

4.1 创建仓库 (git init)

进入您的项目文件夹,执行以下命令来初始化一个新的 Git 仓库。

1
2
cd /path/to/your/project
git init

该命令会创建一个 .git 隐藏子目录,您的 Git 仓库就建立好了。

4.2 检查状态 (git status)

这是最常用的命令,用于查看当前工作区和暂存区的状态。

1
git status

它会告诉您哪些文件被修改了、哪些文件在暂存区、哪些文件还未被 Git 跟踪。

4.3 添加文件到暂存区 (git add)

使用此命令将工作区的变更添加到暂存区。

1
2
3
4
5
6
7
8
# 添加单个文件
git add filename.js

# 添加某个目录下的所有变更
git add src/

# 添加当前目录下的所有变更(. 代表当前目录)
git add .

4.4 提交更新到仓库 (git commit)

将暂存区的所有内容提交到本地仓库,生成一个新的版本。

1
git commit -m "一个清晰的提交信息,说明本次提交的目的"

-m 参数允许您直接在命令行中输入提交信息。如果没有 -m,Git 会启动您配置的默认文本编辑器让您输入。

4.5 查看提交历史 (git log)

此命令用于查看从近到远的提交历史记录。

1
git log

常用参数

  • --oneline:将每次提交压缩到一行显示。
  • --graph:以文本图形的方式展示分支的合并历史。
  • --all:显示所有分支的历史。

5. 分支管理:Git 的精髓

分支是 Git 用于支持并行开发的核心功能。您可以创建一个新分支来进行新功能开发或 Bug 修复,而不会影响到主分支(通常是 mainmaster)的稳定性。

5.1 创建与切换分支 (git branch & git switch)

1
2
3
4
5
6
7
8
9
10
11
# 查看所有本地分支
git branch

# 创建一个名为 feature-x 的新分支
git branch feature-x

# 切换到 feature-x 分支
git switch feature-x

# 创建并直接切换到新分支(推荐)
git switch -c new-feature

注意:在较旧的 Git 版本中,切换分支使用 git checkout new-featureswitch 是较新的、专门用于分支切换的命令。

5.2 合并分支 (git merge)

当您在新分支上的工作完成后,可以将其合并回主分支。

1
2
3
4
5
# 1. 首先,切换回目标分支(例如 main)
git switch main

# 2. 然后,执行合并命令,将 feature-x 分支的修改合并进来
git merge feature-x

5.3 删除分支 (git branch -d)

合并完成后,如果不再需要该分支,可以将其删除。

1
git branch -d feature-x

-d--delete 的缩写,它会确保在删除前该分支的修改已经被合并。如果需要强制删除一个未合并的分支,使用 -D

6. 远程仓库:协作与备份

远程仓库是托管在网络上的项目版本库,最常见的平台是 GitHub、GitLab 和 Bitbucket。

6.1 克隆现有仓库 (git clone)

如果您想获取一个远程仓库的完整拷贝,请使用 clone

1
git clone https://github.com/example/project.git

这会在当前目录下创建一个 project 文件夹,其中包含完整的仓库历史。

6.2 关联远程仓库 (git remote)

如果您在本地初始化了一个仓库,并希望将其关联到一个远程仓库。

1
2
3
4
5
# 1. 添加一个名为 origin 的远程仓库地址(origin 是一个惯用名)
git remote add origin https://github.com/user/repo.git

# 2. 验证远程仓库是否添加成功
git remote -v

6.3 推送更新 (git push)

将本地仓库的提交推送到远程仓库。

1
2
# 将当前分支的提交推送到名为 origin 的远程仓库
git push origin main

main 是您想要推送的本地分支名。

6.4 拉取更新 (git pull)

从远程仓库获取最新的变更,并与您当前的工作分支合并。

1
git pull origin main

git pull 实际上是 git fetch(拉取)和 git merge(合并)两个命令的组合。

7. 常用辅助命令

7.1 忽略文件 (.gitignore)

在项目根目录下创建一个名为 .gitignore 的文件,将不需要纳入版本控制的文件或目录(如依赖文件夹 node_modules、日志文件 *.log、操作系统生成的文件 .DS_Store)写入其中,Git 就会自动忽略它们。

7.2 查看差异 (git diff)

  • git diff:查看工作区暂存区之间的差异。
  • git diff --stagedgit diff --cached:查看暂存区本地仓库(最后一次提交)之间的差异。

7.3 版本回退 (git reset & git restore)

这是一个强大的命令,但使用时需谨慎,因为它会修改提交历史。

  • 撤销暂存:如果您用 git add 添加错了文件,可以用 git restore --staged <filename> 将其移出暂存区。
  • 放弃工作区修改:要放弃某个文件的所有本地修改,恢复到上一次提交的状态,使用 git restore <filename>
  • 回退到历史版本(危险操作)git reset --hard HEAD~1 会将仓库回退到上一个版本,并丢弃此后的所有提交以及工作区和暂存区的所有变更。请务必在确认无误后使用。[?](此处的危险性提示是否足够,或需要更详细的案例说明,请您定夺)。

8. 总结与后续学习

本教程覆盖了 Git 日常使用的核心命令。熟练掌握这些命令,足以应对绝大多数个人和团队协作场景。

后续您可以进一步学习:

  • 变基 (rebase):与 merge 不同的另一种合并分支的策略,可以保持提交历史的线性整洁。
  • 储藏 (stash):临时保存您当前工作区的修改,以便切换到其他分支工作。
  • 标签 (tag):为重要的提交(如版本发布)创建一个永久性的标记。