Git版本控制入门
掌握Git,让代码管理更专业
Git概述
什么是Git
Git 是目前世界上最流行的分布式版本控制系统。
版本控制 = 记录文件变化历史,可以随时回到过去的状态
没有版本控制:
├── 报告_v1.doc
├── 报告_v2.doc
├── 报告_最终版.doc
├── 报告_最终版2.doc
└── 报告_打死不改了.doc
有了Git:
└── 报告.doc
├── commit 1: 初稿
├── commit 2: 加图表
├── commit 3: 改结论
└── commit 4: 最终版
为什么要用Git
- 代码安全:不怕误删或改错
- 历史追溯:查看任意时刻的代码
- 团队协作:多人同时开发
- 分支管理:并行开发不冲突
- 开源社区:GitHub/GitLab必备
Git vs GitHub
Git:版本控制工具,安装在本地
GitHub:代码托管平台,在云端
类比:
Git ≈ 相机(拍照工具)
GitHub ≈ 相册网站(存储和分享照片)
Git核心概念
工作区域
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 工作区 │ │ 暂存区 │ │ 仓库 │
│ Working │ -> │ Staging │ -> │ Repository │
│ Directory │ │ Area │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
写代码 git add git commit
工作区(Working Directory):你电脑上的项目目录
暂存区(Staging Area):准备提交的修改
仓库(Repository):保存所有版本历史
文件状态
文件状态流转:
┌──────────────────┐
│ Untracked │ 未跟踪
│ (新建文件) │
└────────┬─────────┘
│ git add
↓
┌─────────────┐ ┌──────────────────┐
│ Modified │ <- │ Staged │ 已暂存
│ (已修改) │ │ (已暂存) │
└──────┬──────┘ └────────┬─────────┘
│ │ git commit
│ git add ↓
└──────────> ┌──────────────────┐
│ Committed │ 已提交
│ (已提交) │
└──────────────────┘
Git安装与配置
安装(见前面章节)
# 检查安装
git --version
# 输出:git version 2.x.x
初始配置
# 设置用户名和邮箱(必须)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
# 设置默认分支名为main
git config --global init.defaultBranch main
# 设置默认编辑器
git config --global core.editor "code --wait"
# 查看配置
git config --list
# 查看特定配置
git config user.name
基本操作
创建仓库
# 方式一:初始化新仓库
mkdir myproject
cd myproject
git init
# 输出:Initialized empty Git repository in .../myproject/.git/
# 方式二:克隆现有仓库
git clone https://github.com/username/repo.git
第一次提交
# 1. 创建文件
echo "# My Project" > README.md
# 2. 查看状态
git status
# 显示 README.md 为 Untracked(未跟踪)
# 3. 添加到暂存区
git add README.md
# 或 git add . 添加所有文件
# 4. 查看状态
git status
# 显示 README.md 为 Changes to be committed
# 5. 提交
git commit -m "初始化项目,添加README"
# 6. 查看日志
git log
日常工作流
# 1. 修改代码
# ...编辑文件...
# 2. 查看修改了什么
git status # 查看哪些文件改了
git diff # 查看具体改了什么
# 3. 暂存修改
git add . # 暂存所有修改
git add 文件名 # 暂存指定文件
# 4. 提交
git commit -m "描述这次改了什么"
# 5. 查看历史
git log --oneline # 简洁版日志
常用命令详解
git add
git add 文件名 # 添加指定文件
git add . # 添加所有修改
git add *.py # 添加所有py文件
git add -A # 添加所有变化(包括删除)
git add -p # 交互式添加
git commit
git commit -m "提交说明" # 提交
git commit -am "提交说明" # 添加并提交(仅限已跟踪文件)
git commit --amend -m "新说明" # 修改上次提交(未推送时)
git status
git status # 完整状态
git status -s # 简短状态
# M file.txt # 已修改
# A new.txt # 新添加
# D deleted.txt # 已删除
# ?? untracked.txt # 未跟踪
git log
git log # 完整日志
git log --oneline # 简洁日志
git log --oneline -10 # 最近10条
git log --graph # 图形化显示
git log --author="名字" # 按作者筛选
git log -- 文件名 # 某文件的历史
git diff
git diff # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 最新提交
git diff HEAD # 工作区 vs 最新提交
git diff commit1 commit2 # 两个提交之间
撤销与回退
撤销工作区修改
# 丢弃工作区的修改(危险!)
git checkout -- 文件名
git restore 文件名 # 新版本写法
撤销暂存
# 从暂存区撤回(保留修改)
git reset HEAD 文件名
git restore --staged 文件名 # 新版本写法
撤销提交
# 撤销最近一次提交,保留修改
git reset --soft HEAD~1
# 撤销最近一次提交,丢弃修改
git reset --hard HEAD~1
# 创建新提交来撤销(推荐,更安全)
git revert HEAD
恢复删除的文件
# 恢复刚删除的文件
git checkout -- 文件名
# 从某个提交恢复文件
git checkout commit哈希 -- 文件名
分支管理
什么是分支
分支 = 独立的开发线
主分支 main
│
├── commit 1
├── commit 2
│ └──────── 创建分支 feature
├── commit 3 │
│ ├── commit A
│ └── commit B
└── commit 4 │
└─────────┴── 合并分支
分支操作
# 查看分支
git branch # 本地分支
git branch -a # 所有分支(含远程)
# 创建分支
git branch 分支名
# 切换分支
git checkout 分支名
git switch 分支名 # 新版本写法
# 创建并切换
git checkout -b 分支名
git switch -c 分支名 # 新版本写法
# 删除分支
git branch -d 分支名 # 安全删除(已合并)
git branch -D 分支名 # 强制删除
# 重命名分支
git branch -m 旧名 新名
合并分支
# 切换到目标分支
git checkout main
# 合并其他分支到当前分支
git merge 分支名
解决冲突
# 当合并出现冲突时
# 1. Git会在文件中标记冲突:
<<<<<<< HEAD
当前分支的内容
=======
要合并的分支内容
>>>>>>> feature
# 2. 手动编辑解决冲突
# 3. 删除冲突标记,保留需要的内容
# 4. 保存文件
# 5. 添加并提交
git add .
git commit -m "解决合并冲突"
远程仓库
连接远程仓库
# 添加远程仓库
git remote add origin https://github.com/用户名/仓库名.git
# 查看远程仓库
git remote -v
# 修改远程地址
git remote set-url origin 新地址
推送代码
# 首次推送(设置上游分支)
git push -u origin main
# 之后推送
git push
# 推送指定分支
git push origin 分支名
拉取代码
# 拉取并合并
git pull
# 只拉取不合并
git fetch
克隆仓库
git clone https://github.com/用户名/仓库名.git
# 克隆到指定目录
git clone 地址 目录名
# 克隆指定分支
git clone -b 分支名 地址
.gitignore文件
作用
.gitignore 告诉Git哪些文件不需要版本控制。
常用模板
# Python
__pycache__/
*.py[cod]
venv/
.env
# Node.js
node_modules/
npm-debug.log
# IDE
.vscode/
.idea/
*.swp
# 操作系统
.DS_Store
Thumbs.db
# 日志和临时文件
*.log
*.tmp
*.temp
# 敏感信息
*.pem
*.key
secrets.json
创建.gitignore
# 手动创建
touch .gitignore
code .gitignore
# 或使用在线模板
# https://www.gitignore.io/
工作流程示例
个人项目流程
# 1. 初始化项目
mkdir myproject && cd myproject
git init
# 2. 创建.gitignore
echo "*.pyc\n__pycache__/\nvenv/" > .gitignore
# 3. 开发和提交
# 写代码...
git add .
git commit -m "添加用户登录功能"
# 继续开发...
git add .
git commit -m "添加用户注册功能"
# 4. 推送到GitHub
git remote add origin https://github.com/你的用户名/myproject.git
git push -u origin main
团队协作流程
# 1. 克隆项目
git clone https://github.com/team/project.git
cd project
# 2. 创建功能分支
git checkout -b feature/login
# 3. 开发并提交
# 写代码...
git add .
git commit -m "实现登录功能"
# 4. 推送分支
git push -u origin feature/login
# 5. 创建Pull Request(在GitHub上操作)
# 6. 合并后,更新本地main
git checkout main
git pull
常见问题
提交信息写错了
# 修改最近一次提交信息
git commit --amend -m "新的提交信息"
不小心提交了敏感信息
# 从历史中删除文件(谨慎!)
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch 敏感文件" \
--prune-empty --tag-name-filter cat -- --all
# 然后强制推送
git push origin --force --all
想查看某个文件的历史
git log --oneline -- 文件名
git show commit哈希:文件名
合并冲突太复杂
# 放弃合并
git merge --abort
# 然后重新规划合并策略
Git命令速查
基础命令
| 命令 | 用途 |
|---|---|
git init | 初始化仓库 |
git clone | 克隆仓库 |
git add | 添加到暂存区 |
git commit | 提交 |
git status | 查看状态 |
git log | 查看历史 |
git diff | 查看差异 |
分支命令
| 命令 | 用途 |
|---|---|
git branch | 查看/创建分支 |
git checkout | 切换分支 |
git merge | 合并分支 |
git branch -d | 删除分支 |
远程命令
| 命令 | 用途 |
|---|---|
git remote | 管理远程仓库 |
git push | 推送代码 |
git pull | 拉取代码 |
git fetch | 获取远程更新 |
撤销命令
| 命令 | 用途 |
|---|---|
git restore | 恢复文件 |
git reset | 重置提交 |
git revert | 撤销提交(新提交) |
本章小结
- 核心概念:工作区、暂存区、仓库
- 基本流程:add → commit → push
- 分支管理:branch、checkout、merge
- 远程操作:clone、push、pull
- 善用.gitignore:忽略不必要的文件
下一步
环境搭建篇完成!接下来开始编程语言入门。
→ 继续阅读:13-Python快速入门