Git 基础入门教程与常用命令详解
Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 为管理 Linux 内核开发而创建。它旨在高效地处理从小型到大型项目的版本管理,其核心优势在于分布式架构:每个开发者的本地仓库都包含完整的项目历史,支持离线工作,并提供了极其灵活和强大的分支管理能力,这使得团队协作和版本追溯变得非常高效。
- Git 核心概念与文件状态
理解 Git 的工作原理,首先需要掌握其核心区域和文件的四种基本状态,这是所有操作的基础。
核心区域
| 概念 | 说明 |
|---|---|
| 工作区 (Working Directory) | 用户直接看到和编辑的目录,即项目文件夹(不包括 .git 目录)。在这里进行文件的增删改。 |
| 暂存区 (Staging Area / Index) | 一个介于工作区和仓库之间的缓存区域。通过 git add 命令,可以将工作区的特定更改"暂存"到这里,准备组成下一次提交。 |
| 本地仓库 (Local Repository) | 位于项目根目录下的 .git 隐藏文件夹,存储了项目的所有元数据和对象数据库,即所有的提交历史。通过 git commit 命令将暂存区的内容永久保存至此。 |
| 远程仓库 (Remote Repository) | 托管在网络服务器(如 GitHub、Gitee、GitLab)上的仓库,用于团队协作和备份。通过 git push 和 git pull 与之同步。 |
文件生命周期状态
Git 中的文件在其生命周期中会处于以下四种状态之一,并通过命令在这些状态间转换:
| 状态 | 描述 | 所在区域 |
|---|---|---|
| 未跟踪 (Untracked) | 新创建的文件,尚未被 Git 纳入版本管理。 | 工作区 |
| 已修改 (Modified) | 已跟踪的文件在工作区中被修改,但尚未放入暂存区。 | 工作区 |
| 已暂存 (Staged) | 已修改的文件通过 git add 被标记,准备在下次提交时纳入版本库。 |
暂存区 |
| 已提交 (Committed) | 文件已安全地保存在本地版本库中,成为一个永久的快照。 | 本地仓库 |
状态转换流程是 Git 工作流的核心:
工作区 (Untracked/Modified) -- `git add` --> 暂存区 (Staged) -- `git commit` --> 本地仓库 (Committed)
↑ |
|________ `git checkout/reset` __________|
- Git 安装与初始配置
2.1 安装 Git
访问 Git 官方网站 下载对应操作系统(Windows, macOS, Linux)的安装包。安装过程通常只需保持默认选项。安装完成后,打开终端(或命令提示符、Git Bash)并输入以下命令验证:
bash
git --version
如果显示类似 git version 2.xx.x 的信息,则表明安装成功。
2.2 初始全局配置
安装后首要任务是配置用户身份,因为每一次 Git 提交都会使用这些信息。
bash
# 设置全局用户名和邮箱地址
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 可选:设置默认的文本编辑器,如将默认编辑器改为 VS Code
git config --global core.editor "code --wait"
# 查看所有配置项
git config --list
# 查看特定配置项,如用户名
git config user.name
这些配置信息默认保存在用户主目录的 ~/.gitconfig 文件中。
- Git 常用命令详解
以下表格和代码示例涵盖了从创建仓库到日常维护的核心命令。
3.1 仓库初始化与克隆
| 命令 | 作用 | 示例与说明 |
|---|---|---|
git init |
将当前目录初始化为一个新的 Git 仓库。 | git init 执行后,当前目录下会生成一个 .git 子目录,所有仓库数据都存储于此。 |
git clone |
克隆(下载)一个远程仓库到本地。 | git clone https://github.com/username/repo.git 这会创建一个名为 repo 的目录,并自动设置远程地址为 origin。 |
3.2 文件状态查看与提交操作
| 命令 | 作用 | 示例与说明 |
|---|---|---|
git status |
查看工作区和暂存区的状态。这是最常用的命令之一。 | git status 会清晰显示哪些文件被修改(红色)、哪些已暂存(绿色)、哪些未跟踪。 |
git add |
将工作区的更改添加到暂存区。 | git add readme.md 添加单个文件。 git add . 或 git add -A 添加所有更改(包括新文件和删除)。 |
git commit |
将暂存区的内容创建一个新的提交记录到本地仓库。 | git commit -m "Fix: 修复了用户登录的bug" -m 参数后跟提交信息,应简洁明了地描述本次更改。 |
git commit -a |
跳过暂存区,直接提交所有已跟踪文件的修改。 | git commit -a -m "Update docs" 这相当于先执行 git add -u(更新所有已跟踪文件)再执行 git commit。 |
3.3 查看历史与版本回退
| 命令 | 作用 | 示例与说明 |
|---|---|---|
git log |
查看提交历史。 | git log 显示完整的提交历史,包括哈希值、作者、日期和提交信息。 git log --oneline --graph 以简洁的单行和图形化方式查看,尤其适合查看分支合并历史。 |
git diff |
查看文件的具体差异。 | git diff 比较工作区 和暂存区 的差异。 git diff --staged 比较暂存区 和最新提交 的差异。 git diff HEAD~1 HEAD 比较最近两次提交的差异。 |
git reset |
将当前分支的 HEAD 指针重置到指定的提交,用于版本回退。 | git reset --soft HEAD~1 回退到上一个版本,但保留工作区和暂存区的所有修改。 git reset --mixed HEAD~1 (默认 ) 回退到上一个版本,保留工作区修改,但清空暂存区。 git reset --hard HEAD~1 (危险) 彻底回退到上一个版本,丢弃工作区和暂存区的所有修改。 |
git checkout |
切换分支或恢复工作区文件。 | git checkout main 切换到 main 分支。 git checkout -- file.txt 丢弃工作区中 file.txt 文件的修改,恢复到最近一次 git add 或 git commit 时的状态。 |
git restore |
(Git 2.23+ 新增) 更直观地恢复文件。 | git restore file.txt 等同于 git checkout -- file.txt。 git restore --staged file.txt 将文件从暂存区移回工作区(取消暂存)。 |
3.4 分支管理
Git 的分支是其标志性功能,创建和切换分支成本极低。
bash
# 查看所有分支,当前分支前有 * 号标记
git branch
# 创建新分支
git branch feature-login
# 切换到指定分支
git checkout feature-login
# 或使用较新的 switch 命令(语义更清晰)
git switch feature-login
# 创建并立即切换到新分支
git checkout -b hotfix-bug
# 或
git switch -c hotfix-bug
# 将指定分支合并到当前分支
git merge feature-login
# 执行此命令前,通常需要先切换到主分支 (git checkout main)
# 删除已合并的分支
git branch -d feature-login
# 强制删除一个未合并的分支
git branch -D experimental-branch
3.5 远程仓库操作
| 命令 | 作用 | 示例与说明 |
|---|---|---|
git remote |
管理远程仓库地址。 | git remote -v 查看远程仓库的详细地址。 git remote add origin https://gitee.com/username/repo.git 添加一个名为 origin 的远程仓库。 |
git push |
将本地分支的提交推送到远程仓库。 | git push -u origin main 首次推送时,-u 参数建立本地 main 分支与远程 origin/main 的追踪关系,后续可直接用 git push。 |
git pull |
从远程仓库拉取更新并合并到当前分支。 | git pull origin main 这相当于执行了 git fetch origin main(获取更新)和 git merge origin/main(合并到当前分支)两个操作。 |
git fetch |
从远程仓库下载所有更新,但不自动合并。 | git fetch origin 这将更新远程跟踪分支(如 origin/main),让你看到别人的工作进展,而不会影响你的工作区。 |
3.6 标签管理
标签用于标记重要的提交点,如版本发布 (v1.0.0)。
bash
# 查看所有标签
git tag
# 在当前提交上创建一个轻量标签
git tag v1.0.0
# 创建一个带注解的标签
git tag -a v1.0.0 -m "Release version 1.0.0"
# 将标签推送到远程仓库
git push origin v1.0.0
# 推送所有标签
git push origin --tags
- 典型 Git 工作流示例
一个标准的个人或小型团队 Git 工作流如下:
-
准备阶段 :
git clone <url>获取项目代码,或git init初始化新项目。 -
开发阶段 :在
main或develop分支上进行日常开发。建议为每个新功能或修复创建独立分支:git checkout -b feature-xxx。 -
暂存与提交 :完成一部分工作后,使用
git add .暂存更改,然后git commit -m "message"提交到本地仓库。这个过程可以重复多次。 -
同步更新 :在推送前,先执行
git pull origin main拉取远程最新代码,解决可能出现的合并冲突。 -
推送共享 :使用
git push origin feature-xxx将本地分支推送到远程。 -
合并请求 :在代码托管平台(如 GitHub)上发起 Pull Request (PR),请求将
feature-xxx分支合并到主分支。经过代码评审后完成合并。 -
清理分支 :远程分支合并后,删除本地和远程的临时分支:
git branch -d feature-xxx和git push origin --delete feature-xxx。 -
在 IDE 中使用 Git(以 IntelliJ IDEA 为例)
现代 IDE 提供了强大的图形化 Git 工具,极大提升了效率。
- 仓库克隆与打开 :通过
File -> New -> Project from Version Control直接输入 URL 克隆项目。 - 状态可视化 :右侧边栏或底部栏的
Commit工具窗口,以颜色(红/绿/蓝)清晰展示文件状态(修改、新增、冲突)。 - 图形化提交 :在
Commit窗口中勾选文件即可暂存,输入信息后点击Commit或Commit and Push一键提交并推送。 - 分支操作:IDEA 窗口右下角有分支名,点击可以快速查看所有分支、创建新分支、切换分支、合并分支。
- 历史与差异查看 :在编辑器中右键文件,选择
Git -> Show History可以图形化查看该文件的修改历史,并方便地对比不同版本差异。 - 冲突解决 :当
git pull或git merge产生冲突时,IDEA 会弹出可视化合并工具,让你清晰地对比"你的代码"、"他人代码"和"合并结果",并可以方便地选择保留哪一部分或进行手动编辑。
掌握上述基础命令和概念是高效使用 Git 的关键。建议在实战中结合 git status 命令反复观察文件状态的变化,从而深入理解 Git 的工作机制。对于团队协作,熟悉基于功能分支的工作流和 Pull Request 流程至关重要。