4142 字
21 分钟

Git 完全入门指南 2026:从零开始掌握版本控制 / GitHub 协作 / 分支管理

Git 是程序员必备的核心技能。无论你是独立开发者还是团队协作,掌握 Git 能让你:随时回退代码、并行开发多个功能、安全地尝试新想法而不破坏原有代码。本文从零开始,带你系统掌握 Git 基础知识与实战技能。

Git 完全入门指南

本文内容:

  • Git 核心概念与安装配置
  • 基础命令:init / add / commit / status / log / diff
  • 分支管理:branch / checkout / merge
  • 远程协作:clone / push / pull / fetch
  • GitHub / GitLab 实战操作
  • SSH 密钥配置与常见问题解决

一、Git 是什么?为什么必须学习?#

1.1 版本控制的意义#

没有版本控制的噩梦:
├── report_final.doc
├── report_final_v2.doc
├── report_final_真的最终版.doc
├── report_final_老板改过.doc
└── report_final_打死不改了.doc ← 到底哪个是最终版?
使用 Git 后:
├── 所有版本历史清晰可查
├── 随时回退到任意历史版本
├── 多人协作不会互相覆盖
├── 每次修改都有明确记录
└── 一个仓库,一份代码,无限历史

1.2 Git vs 其他版本控制工具#

特性 Git SVN CVS
────────────────────────────────────────────────────────────
架构 分布式 集中式 集中式
离线工作 ✅ 完全支持 ❌ 需联网 ❌ 需联网
分支操作 ✅ 秒级创建/切换 ⚠️ 慢(复制目录) ⚠️ 慢
合并能力 ✅ 强大 ⚠️ 一般 ❌ 较弱
性能 ✅ 高效 ⚠️ 一般 ❌ 慢
社区支持 ✅ 最活跃 ⚠️ 老项目 ❌ 几乎淘汰
学习曲线 ⚠️ 稍陡峭 ✅ 简单 ✅ 简单
业界采用率 90%+ 5% <1%

1.3 Git 应用场景#

Terminal window
# 场景1:个人项目管理
git init # 初始化仓库
git add . # 追踪所有文件
git commit -m "first commit" # 提交快照
# 即使误删文件,也能用 git checkout -- file 恢复
# 场景2:团队协作开发
git clone git@github.com:team/project.git # 克隆项目
git checkout -b feature/login # 创建功能分支
# ... 开发新功能 ...
git push origin feature/login # 推送分支
# 在 GitHub 上创建 Pull Request 进行代码评审
# 场景3:开源项目贡献
git clone git@github.com:popular/oss.git # 克隆开源项目
git checkout -b fix-bug # 创建修复分支
# ... 修复 Bug ...
git push origin fix-bug # 推送
# 创建 Pull Request 贡献代码

二、Git 安装与配置#

2.1 安装 Git#

Terminal window
# macOS(推荐 Homebrew)
brew install git
# Ubuntu / Debian
sudo apt update && sudo apt install git -y
# CentOS / RHEL
sudo yum install git -y
# Windows
# 下载安装包:https://git-scm.com/download/win
# 安装时选择 "Git Bash Here" 添加到右键菜单
# 验证安装
git --version
# git version 2.47.0

2.2 初始配置(必须)#

Terminal window
# 设置用户名和邮箱(会出现在每次提交记录中)
git config --global user.name "你的名字"
git config --global user.email "your_email@example.com"
# 设置默认分支名为 main(代替 master)
git config --global init.defaultBranch main
# 设置默认编辑器(可选)
git config --global core.editor "code --wait" # VS Code
# 或
git config --global core.editor "vim"
# 查看所有配置
git config --global --list
# 配置文件位置
# macOS/Linux: ~/.gitconfig
# Windows: C:\Users\用户名\.gitconfig

2.3 推荐配置#

Terminal window
# 自动转换换行符(Windows 用户必配)
git config --global core.autocrlf true
# 彩色输出
git config --global color.ui auto
# 设置常用别名(提高效率)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all"
# 使用别名后:
# git st 等同于 git status
# git lg 等同于 git log --oneline --graph --all

三、Git 核心概念#

3.1 三个区域#

┌─────────────────────────────────────────────────────────────────┐
│ Git 仓库结构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ git add ┌─────────────┐ git commit │
│ │ 工作目录 │ ───────────→ │ 暂存区 │ ───────────→ │
│ │ (Working │ │ (Staging │ │
│ │ Directory) │ │ Area) │ │
│ └─────────────┘ └─────────────┘ │
│ ↑ ┌─────────────┐
│ │ │ 仓库 │
│ │ git checkout │ (Repository)│
│ └───────────────────────────────────────────────────│ 历史 │
│ └─────────────┘
└─────────────────────────────────────────────────────────────────┘
工作目录:你看到的实际文件,正在编辑的内容
暂存区:准备提交的文件快照(git add 后进入这里)
仓库:已提交的历史记录(git commit 后存入这里)

3.2 文件状态生命周期#

git add git commit
未跟踪 ───────────→ 已暂存 ─────────────────→ 已提交
│ │
│ 编辑文件 │
│←───────────────────────────────────────────┤
│ │
│ 编辑已提交的文件 │
│←───────────────────────────────────────────┤
│ │
└────────────────────────────────────────────┘
git add(再次)
状态查看:git status

3.3 提交(Commit)与哈希#

Terminal window
# 每次提交生成一个唯一的 SHA-1 哈希值
git log --oneline -5
# a1b2c3d (HEAD -> main) 添加用户登录功能
# e4f5g6h 修复首页样式问题
# i7j8k9l 初始化项目
# 哈希值可用于:
# - 回退版本:git reset --hard a1b2c3d
# - 查看差异:git diff e4f5g6h a1b2c3d
# - 摘取提交:git cherry-pick a1b2c3d
# 提交信息规范(推荐)
# 格式:<type>: <subject>
# type: feat(新功能) / fix(修复) / docs(文档) / style(格式) / refactor(重构) / test(测试) / chore(构建)
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复首页样式问题"
git commit -m "docs: 更新 README 安装说明"

四、Git 基础命令实战#

4.1 创建仓库#

Terminal window
# 方式1:在现有目录初始化
mkdir my-project
cd my-project
git init
# Initialized empty Git repository in /path/my-project/.git/
# 方式2:克隆已有仓库
git clone https://github.com/user/repo.git
# 或使用 SSH(推荐)
git clone git@github.com:user/repo.git
# 克隆到指定目录
git clone git@github.com:user/repo.git my-folder
# 克隆指定分支
git clone -b dev git@github.com:user/repo.git

4.2 日常提交流程#

Terminal window
# 1. 查看当前状态(最重要!养成习惯)
git status
# On branch main
# Changes not staged for commit:
# modified: src/index.js
# Untracked files:
# src/utils.js
# 2. 添加到暂存区
git add src/index.js # 添加单个文件
git add src/ # 添加整个目录
git add . # 添加所有更改
# 3. 再次查看状态确认
git status
# Changes to be committed:
# modified: src/index.js
# 4. 提交到仓库
git commit -m "feat: 添加工具函数"
# 5. 查看提交历史
git log
# 或简洁模式
git log --oneline -5

4.3 查看历史与差异#

Terminal window
# 查看提交历史
git log # 详细历史
git log --oneline # 简洁模式
git log --oneline --graph # 分支图形
git log --oneline -10 # 最近10条
# 查看某次提交的详情
git show a1b2c3d
# 查看文件的修改历史
git log --follow -- path/to/file
# 查看差异
git diff # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 最新提交
git diff HEAD~1 HEAD # 对比两次提交
git diff main..dev # 对比两个分支
# 查看谁修改了某行(追责)
git blame src/index.js

4.4 撤销操作#

Terminal window
# 撤销工作区修改(未 add)
git checkout -- filename
# 或(新语法)
git restore filename
# 撤销暂存(已 add,未 commit)
git reset HEAD filename
# 或
git restore --staged filename
# 修改最后一次提交信息
git commit --amend -m "新的提交信息"
# 撤销提交(保留修改)
git reset --soft HEAD~1 # 回退到上一次提交,修改在暂存区
# 撤销提交(丢弃修改)⚠️ 危险
git reset --hard HEAD~1 # 完全回退,丢失所有修改
# 已推送的提交撤销(创建新提交来撤销)
git revert a1b2c3d # 安全,不改写历史

4.5 忽略文件(.gitignore)#

Terminal window
# 创建 .gitignore 文件
# 内容示例:
# 依赖目录
node_modules/
vendor/
# 构建产物
dist/
build/
*.min.js
# IDE 配置
.idea/
.vscode/
*.swp
# 系统文件
.DS_Store
Thumbs.db
# 环境配置(含敏感信息)
.env
.env.local
config/local.json
# 日志和临时文件
*.log
*.tmp
tmp/
# 强制追踪某个文件(即使目录被忽略)
!important/
!important/config.json

五、分支管理#

5.1 分支基础#

Terminal window
# 查看分支
git branch # 本地分支
git branch -a # 所有分支(含远程)
git branch -r # 仅远程分支
# 创建分支
git branch feature/login # 创建
git checkout -b feature/login # 创建并切换
git switch -c feature/login # 新语法(推荐)
# 切换分支
git checkout main
git switch main # 新语法(推荐)
# 合并分支
git checkout main
git merge feature/login
# 删除分支
git branch -d feature/login # 已合并的分支
git branch -D feature/login # 强制删除(未合并也删)
# 查看分支图
git log --oneline --graph --all

5.2 分支工作流#

# 典型的功能分支工作流:
main ─────●─────●─────●─────●─────→ 发布
\ /
feature ●─────●───┘ 功能分支开发完成合并
# 操作步骤:
git checkout main
git pull origin main
git checkout -b feature/new-feature
# ... 开发新功能 ...
git add .
git commit -m "feat: 新功能完成"
git push origin feature/new-feature
# 在 GitHub 创建 Pull Request
# 代码评审通过后合并

5.3 解决合并冲突#

Terminal window
# 冲突场景:两个分支修改了同一文件的同一位置
# 步骤1:尝试合并
git merge feature/login
# CONFLICT (content): Merge conflict in src/index.js
# Automatic merge failed; fix conflicts and then commit.
# 步骤2:查看冲突文件
git status
# Unmerged paths:
# both modified: src/index.js
# 步骤3:手动编辑冲突文件
# 文件内容:
<<<<<<< HEAD
const version = "1.0.0"; # 当前分支的内容
=======
const version = "2.0.0"; # 要合并分支的内容
>>>>>>> feature/login
# 修改为:
const version = "2.0.0"; # 选择保留的内容
# 步骤4:标记冲突已解决
git add src/index.js
# 步骤5:完成合并
git commit -m "merge: 解决版本号冲突"

六、远程仓库协作#

6.1 远程仓库管理#

Terminal window
# 查看远程仓库
git remote -v
# origin git@github.com:user/repo.git (fetch)
# origin git@github.com:user/repo.git (push)
# 添加远程仓库
git remote add origin git@github.com:user/repo.git
git remote add upstream git@github.com:original/repo.git # Fork 的上游仓库
# 修改远程地址
git remote set-url origin git@github.com:user/new-repo.git
# 删除远程仓库
git remote remove origin
# 查看远程仓库详情
git remote show origin

6.2 推送与拉取#

Terminal window
# 首次推送(设置上游分支)
git push -u origin main
# 之后可以直接
git push
# 推送所有分支
git push --all origin
# 推送标签
git push --tags
# 拉取更新
git pull origin main
# 等同于
git fetch origin main
git merge origin/main
# 仅获取不合并(安全)
git fetch origin
git log origin/main # 先查看变更
git merge origin/main # 确认后再合并
# 强制拉取远程覆盖本地(谨慎)
git fetch origin
git reset --hard origin/main

6.3 GitHub 协作流程#

Terminal window
# 场景:为开源项目贡献代码
# 1. Fork 项目到自己的账号(在 GitHub 网页操作)
# 2. 克隆自己的 Fork
git clone git@github.com:yourname/oss-project.git
cd oss-project
# 3. 添加上游仓库
git remote add upstream git@github.com:original/oss-project.git
# 4. 创建功能分支
git checkout -b fix-security-issue
# 5. 开发并提交
# ... 修改代码 ...
git add .
git commit -m "fix: 修复安全漏洞"
# 6. 同步上游最新代码
git fetch upstream
git rebase upstream/main # 或 merge
# 7. 推送到自己的 Fork
git push origin fix-security-issue
# 8. 在 GitHub 创建 Pull Request
# 9. PR 合并后,更新本地 main
git checkout main
git pull upstream main
git push origin main

七、GitHub / GitLab 实战#

7.1 GitHub 基础操作#

GitHub 核心功能:
1. 仓库管理
- Create Repository:创建仓库
- Settings → Danger Zone:删除仓库、归档
- Branches:设置默认分支、保护分支
2. 协作功能
- Issues:问题跟踪、Bug 报告
- Pull Requests:代码评审、合并请求
- Discussions:社区讨论
- Wiki:项目文档
3. 自动化
- Actions:CI/CD 自动化(测试、部署)
- Packages:包管理
- Pages:静态网站托管
4. 安全
- Security → Secrets:存储密钥
- Branch protection rules:分支保护
- CODEOWNERS:代码所有者

7.2 Pull Request 流程#

Terminal window
# 创建 PR 的标准流程:
# 1. 确保分支是最新的
git checkout main
git pull origin main
# 2. 创建功能分支
git checkout -b feature/new-feature
# 3. 开发并提交
# ... 编写代码 ...
git add .
git commit -m "feat: 新功能描述"
git push origin feature/new-feature
# 4. 在 GitHub 网页创建 Pull Request
# - 选择 base: main ← compare: feature/new-feature
# - 填写 PR 标题和描述
# - 添加 Reviewer(评审人)
# - 关联相关 Issue(如 #123)
# 5. 根据 Review 反馈修改
# ... 修改代码 ...
git add .
git commit -m "fix: 根据 Review 反馈修改"
git push origin feature/new-feature
# 6. PR 合并后删除分支
git checkout main
git pull origin main
git branch -d feature/new-feature
git push origin --delete feature/new-feature

7.3 GitLab 对比#

功能 GitHub GitLab
─────────────────────────────────────────────────
托管方式 仅云端 云端 + 自托管
私有仓库 免费 免费
CI/CD GitHub Actions GitLab CI
注册要求 需要 可自建免注册
代码评审 Pull Request Merge Request
内置 DevOps 部分 全面
企业适用 中小团队 大型企业

八、SSH 密钥配置#

8.1 生成 SSH 密钥#

Terminal window
# 生成 Ed25519 密钥(推荐)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或 RSA(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 按提示操作:
# Enter file to save the key: ~/.ssh/id_ed25519 # 默认路径
# Enter passphrase: ****** # 可选密码保护
# 查看公钥
cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAC3Nza... your_email@example.com

8.2 添加到 GitHub#

1. 复制公钥内容
cat ~/.ssh/id_ed25519.pub | pbcopy # macOS
cat ~/.ssh/id_ed25519.pub | clip # Windows Git Bash
2. 打开 GitHub → Settings → SSH and GPG keys → New SSH key
3. 粘贴公钥,保存
4. 测试连接
ssh -T git@github.com
# Hi username! You've successfully authenticated.

8.3 多账号配置#

Terminal window
# 场景:同时使用 GitHub 和 GitLab
# 生成不同密钥
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_ed25519_work
ssh-keygen -t ed25519 -C "personal@gmail.com" -f ~/.ssh/id_ed25519_personal
# 配置 ~/.ssh/config
cat > ~/.ssh/config << 'EOF'
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
Host gitlab.company.com
HostName gitlab.company.com
User git
IdentityFile ~/.ssh/id_ed25519_work
EOF
# 测试
ssh -T git@github.com
ssh -T git@gitlab.company.com

九、常见问题解决#

9.1 撤销已推送的提交#

Terminal window
# 方式1:git revert(推荐,不改写历史)
git revert a1b2c3d
git push origin main
# 方式2:git reset(危险,仅限自己独用的分支)
git reset --hard HEAD~1
git push --force origin main # ⚠️ 会覆盖远程历史

9.2 合并冲突解决策略#

Terminal window
# 策略1:接受他们的版本
git checkout --theirs conflict-file.js
git add conflict-file.js
# 策略2:接受我们的版本
git checkout --ours conflict-file.js
git add conflict-file.js
# 策略3:使用合并工具
git mergetool
# 策略4:取消合并
git merge --abort

9.3 大文件处理#

Terminal window
# 问题:不小心提交了大文件,仓库变得很臃肿
# 使用 git filter-branch(传统方法)
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch path/to/large-file' \
--prune-empty --tag-name-filter cat -- --all
# 使用 BFG Repo-Cleaner(推荐,更快)
# 下载:https://rtyley.github.io/bfg-repo-cleaner/
java -jar bfg.jar --strip-blobs-bigger-than 50M
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push --force

9.4 救回误删的分支/提交#

Terminal window
# 使用 reflog 找回
git reflog
# a1b2c3d HEAD@{1}: checkout: moving from feature to main
# e4f5g6h HEAD@{2}: commit: 重要的提交 ← 找到这个
# 恢复提交
git checkout -b recovered-branch e4f5g6h
# 恢复已删除的分支
git checkout -b recovered-branch HEAD@{2}

9.5 清理工作区#

Terminal window
# 删除未跟踪的文件(预览)
git clean -n
# 删除未跟踪的文件
git clean -f
# 删除未跟踪的文件和目录
git clean -fd
# 删除被忽略的文件(谨慎)
git clean -fX

十、命令速查表#

10.1 基础命令#

命令 作用
─────────────────────────────────────────────────────
git init 初始化仓库
git clone <url> 克隆远程仓库
git status 查看状态
git add <file> 添加到暂存区
git add . 添加所有更改
git commit -m "msg" 提交
git log 查看历史
git log --oneline 简洁历史
git diff 查看差异
git show <hash> 查看提交详情

10.2 分支命令#

命令 作用
─────────────────────────────────────────────────────
git branch 列出分支
git branch <name> 创建分支
git checkout <branch> 切换分支
git checkout -b <name> 创建并切换
git switch <branch> 切换分支(新语法)
git switch -c <name> 创建并切换(新语法)
git merge <branch> 合并分支
git branch -d <name> 删除分支
git branch -D <name> 强制删除

10.3 远程命令#

命令 作用
─────────────────────────────────────────────────────
git remote -v 查看远程仓库
git remote add <name> <url> 添加远程仓库
git push <remote> <branch> 推送分支
git push -u <remote> <branch> 推送并设置上游
git pull <remote> <branch> 拉取并合并
git fetch <remote> 获取远程更新
git remote set-url <name> <url> 修改远程地址

10.4 撤销命令#

命令 作用
─────────────────────────────────────────────────────
git restore <file> 撤销工作区修改
git restore --staged <file> 撤销暂存
git reset HEAD <file> 撤销暂存
git reset --soft HEAD~1 撤销提交(保留修改)
git reset --hard HEAD~1 撤销提交(丢弃修改)
git revert <hash> 撤销已推送的提交
git commit --amend 修改最后一次提交

十一、学习路径与进阶#

11.1 学习建议#

第1周:基础命令
├── 每天 git status / git add / git commit
├── 理解三个区域的概念
└── 养成频繁提交的习惯
第2周:分支与协作
├── 创建、切换、合并分支
├── 解决合并冲突
└── 推送到 GitHub,创建 PR
第3周:进阶技巧
├── git stash 暂存工作区
├── git rebase 整理历史
├── .gitignore 配置
└── SSH 密钥管理
第4周:团队工作流
├── Git Flow / GitHub Flow
├── Code Review 最佳实践
├── CI/CD 集成
└── 冲突预防策略

11.2 推荐资源#

官方文档:
- https://git-scm.com/book/zh/v2 (Pro Git 中文版)
- https://git-scm.com/docs (命令参考)
交互学习:
- https://learngitbranching.js.org (可视化练习)
- https://github.com/jlord/git-it-electron (桌面练习)
进阶阅读:
- 《Pro Git》
- 本博客《Git 进阶实战完全指南》
问题解决:
- Stack Overflow: [git] 标签
- GitHub Community

总结#

Git 学习曲线虽有一定陡峭,但掌握核心命令后,日常 90% 的场景只需用到:

  • status / add / commit / log / diff(日常提交)
  • branch / checkout / merge(分支管理)
  • clone / push / pull / fetch(远程协作)

建议:

  1. 每天使用,形成肌肉记忆
  2. 遇到问题先 git status 查看状态
  3. 重要操作前先提交当前工作
  4. 推送到远程前本地多测试
  5. 不确定就用 git stash 先保存

Git 是程序员的时光机,掌握它让你的代码永不丢失。

Git 完全入门指南 2026:从零开始掌握版本控制 / GitHub 协作 / 分支管理
https://971918.xyz/posts/docs/git-beginner-guide/
作者
九所长
发布于
2026-07-31
许可协议
CC BY-NC-SA 4.0