从零开始学 Git,掌握 init、clone、add、commit、status、branch 等核心命令,快速上手版本控制。

Git — 程序员的时光机

Git 是目前最流行的分布式版本控制系统,几乎所有现代开发项目都离不开它。无论你是独立开发者还是团队协作成员,Git 都是必备技能。

本文带你从零开始,掌握 Git 最核心的基础命令。


一、什么是 Git?

Git 是一个分布式版本控制系统,由 Linux 之父 Linus Torvalds 于 2005 年创建,最初是为管理 Linux 内核源代码而设计。

与集中式版本控制(如 SVN)不同,Git 每个开发者本地都有完整的仓库副本,包括全部历史记录。

核心优势

  • 离线工作:不需要网络连接也能提交代码
  • 分支灵活:创建和切换分支几乎是瞬间完成
  • 数据完整:每次提交都有 SHA-1 哈希校验
  • 协作高效:支持多人并行开发,合并冲突清晰

二、查看 Git 版本

安装 Git 后,第一件事是确认版本:

1
git --version

输出示例:

1
git version 2.47.1.windows.2
提示

如果提示命令不存在,说明 Git 未安装或未加入环境变量。Windows 用户可从 git-scm.com 下载安装。


三、初始化仓库:git init

git init 用于在当前目录创建一个新的 Git 仓库。

1
2
3
4
5
# 进入项目目录
cd my-project

# 初始化 Git 仓库
git init

执行后会在当前目录下创建一个隐藏的 .git 文件夹:

1
2
3
4
5
6
7
8
my-project/
├── .git/ ← Git 仓库的核心,存储所有版本数据
│ ├── HEAD ← 指向当前分支的引用
│ ├── config ← 本仓库的配置
│ ├── objects/ ← 存储数据对象(提交、文件快照等)
│ └── refs/ ← 存储分支和标签引用
├── src/
└── README.md

注意:不要手动修改 .git 目录中的文件,这可能导致仓库损坏。所有操作都应通过 Git 命令完成。

设置默认分支名

Git 默认创建的分支名是 master,现在社区普遍推荐使用 main

1
2
3
4
5
6
# 方法1:全局设置(推荐,一劳永逸)
git config --global init.defaultBranch main

# 方法2:初始化后手动重命名
git init
git branch -m master main
补充

git branch -m 是分支重命名命令,-m 表示 move(移动/重命名)。


四、克隆仓库:git clone

git clone 用于从远程仓库(如 GitHub、Gitee)复制一份完整的项目到本地:

1
2
3
4
5
# HTTPS 方式(无需配置)
git clone https://github.com/user/repo.git

# SSH 方式(需配置密钥,速度更快)
git clone git@github.com:user/repo.git

clone 做了什么?

1
2
3
4
5
6
远程仓库 (GitHub)           本地仓库
┌──────────────┐ ┌──────────────┐
│ 所有分支 │ ────→ │ 所有分支 │
│ 所有标签 │ 完整复制 │ 所有标签 │
│ 全部历史 │ │ 全部历史 │
└──────────────┘ └──────────────┘

关键点clone 会下载完整的仓库历史,而不仅仅是最新代码。这意味着即使断网,你也能查看任意历史版本。

克隆到指定目录

1
2
3
4
5
# 默认:创建与仓库同名的文件夹
git clone https://github.com/user/repo.git

# 指定目录名
git clone https://github.com/user/repo.git my-folder

浅克隆(只拉最新提交)

1
2
# 只拉最近1次提交,节省带宽和时间
git clone --depth 1 https://github.com/user/repo.git
注意

浅克隆适用于只需要最新代码的场景(如部署),但无法查看完整历史和切换分支。


五、日常工作流:add → commit

这是 Git 最核心的操作流程,每次修改代码都要经历:

1
2
3
4
5
修改文件 ──→ git add ──→ git commit ──→ 提交到历史
│ │ │
▼ ▼ ▼
工作区 暂存区 仓库历史
(Working) (Staging) (Repository)

5.1 查看状态:git status

1
git status

输出会用颜色标注文件状态:

1
2
3
4
5
6
7
8
9
10
On branch main

Changes not staged for commit: ← 红色:修改了但没 add
modified: src/main.js

Changes to be committed: ← 绿色:已经 add,等待 commit
new file: src/utils.js

Untracked files: ← 红色:新文件,Git 还不认识
README.md

小技巧:用 git status -s 查看简洁版状态,输出更紧凑:

1
2
3
 M src/main.js      ← 空格M:工作区修改,未暂存
A src/utils.js ← A:已暂存的新文件
?? README.md ← ??:未跟踪的文件

5.2 暂存文件:git add

1
2
3
4
5
6
7
8
# 暂存单个文件
git add src/main.js

# 暂存多个文件
git add file1.js file2.js file3.js

# 暂存当前目录所有修改
git add .

慎用 git add .:它会把所有修改(包括不该提交的文件如 .env、密钥文件)都加入暂存区。建议用 git add 指定文件,或确保 .gitignore 已正确配置。

5.3 提交更改:git commit

1
2
3
4
5
# 提交并写描述信息
git commit -m "feat: 添加用户登录功能"

# 打开编辑器写详细信息(适合复杂提交)
git commit

5.4 提交信息规范

好的提交信息应该清晰说明这次修改做了什么:

1
2
3
4
5
6
7
feat: 添加用户注册接口
fix: 修复登录时密码验证错误
docs: 更新 API 文档中的参数说明
style: 统一代码缩进为 2 空格
refactor: 重构用户模块的数据层
test: 添加用户注册接口的单元测试
chore: 升级 webpack 到 v5.0
1
2
3
4
update            ← 改了什么?
修改代码 ← 太模糊
111 ← 无意义
fix bug ← 哪个 bug?

六、分支基础:git branch

分支是 Git 最强大的功能之一,允许你在不影响主线的情况下开发新功能。

查看分支

1
2
3
4
5
6
7
8
# 查看本地分支
git branch

# 查看所有分支(含远程)
git branch -a

# 查看分支及最后提交信息
git branch -v

输出示例:

1
2
3
  develop
* main ← * 表示当前所在分支
feature/login

创建分支

1
2
3
4
5
6
7
8
# 创建新分支
git branch feature/login

# 创建并切换到新分支(推荐,一步到位)
git checkout -b feature/login

# 同上,更新的语法
git switch -c feature/login

切换分支

1
2
git checkout main          # 老语法
git switch main # 新语法(推荐)

重命名分支

1
2
3
4
5
# 重命名当前分支
git branch -m main

# 重命名指定分支
git branch -m old-name new-name

删除分支

1
2
3
4
5
# 删除已合并的分支(安全)
git branch -d feature/login

# 强制删除未合并的分支(危险,代码会丢失)
git branch -D feature/login

分支命名建议

  • feature/xxx — 新功能
  • fix/xxx — 修 Bug
  • hotfix/xxx — 紧急修复
  • docs/xxx — 文档更新
  • refactor/xxx — 重构

七、远程操作:push 与 pull

本地开发完成后,需要把代码推送到远程仓库与团队共享。

7.1 关联远程仓库

1
2
3
4
5
# 查看已关联的远程仓库
git remote -v

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

7.2 推送代码:git push

1
2
3
4
5
# 推送当前分支到远程
git push origin main

# 首次推送并设置上游(之后可直接 git push)
git push -u origin main

7.3 拉取代码:git pull

1
2
3
4
5
# 拉取远程更新并合并(默认)
git pull

# 拉取并使用 rebase(推荐,保持历史干净)
git pull --rebase

最佳实践:建议全局开启 pull.rebase,避免产生大量无意义的 “Merge remote-tracking branch” 提交:

1
git config --global pull.rebase true

八、查看历史:git log

1
2
3
4
5
6
7
8
9
10
11
# 完整历史
git log

# 简洁模式(推荐)
git log --oneline

# 带分支图
git log --oneline --graph --all

# 查看某个文件的修改历史
git log -p src/main.js

简洁输出示例:

1
2
3
a1b2c3d (HEAD -> main) feat: 添加登录功能
e4f5g6h fix: 修复首页样式问题
i7j8k9l docs: 更新 README

总结:Git 基础命令速查表

命令作用常用参数
git init初始化仓库
git clone <url>克隆远程仓库--depth 1 浅克隆
git status查看文件状态-s 简洁模式
git add <file>暂存文件. 暂存所有
git commit -m "msg"提交更改--amend 修改上一次提交
git branch查看/管理分支-m 重命名、-d 删除
git checkout <branch>切换分支-b 创建并切换
git switch <branch>切换分支(新语法)-c 创建并切换
git push推送到远程-u 设置上游
git pull拉取远程更新--rebase 使用变基
git log查看提交历史--oneline 简洁模式
git --version查看 Git 版本