1. Git 基础概念
仓库(Repository):存储代码和版本历史的地方,可以是本地或远程(如 GitHub、GitLab)。
提交(Commit):保存代码变更的快照,包含唯一哈希值(如 `a1b2c3d`)。
分支(Branch):独立开发线,默认分支通常是 `main` 或 `master`。
远程(Remote):托管在服务器上的仓库(如 `origin` 指向 GitHub)。
工作区(Working Directory):本地文件系统上的代码。
暂存区(Staging Area):准备提交的变更(`git add` 后进入暂存区)。
---
2. Git 基本命令
初始化 & 克隆仓库
| 命令 | 说明 |
|------|------|
| `git init` | 在当前目录初始化新仓库 |
| `git clone <仓库URL>` | 克隆远程仓库到本地 |
示例:
```bash
git clone https://github.com/user/repo.git
cd repo
提交代码
| 命令 | 说明 |
| `git status` | 查看文件变更状态 |
| `git add <文件名>` | 将文件加入暂存区 |
| `git add .` | 添加所有变更到暂存区 |
| `git commit -m "提交信息"` | 提交暂存区的变更 |
| `git log` | 查看提交历史 |
示例:
```bash
git add index.html
git commit -m "更新首页样式"
分支管理
| 命令 | 说明 |
|------|------|
| `git branch` | 查看所有分支 |
| `git branch <分支名>` | 创建新分支 |
| `git checkout <分支名>` | 切换到分支 |
| `git switch <分支名>` | (Git ≥ 2.23)切换分支 |
| `git merge <分支名>` | 合并分支到当前分支 |
| `git branch -d <分支名>` | 删除分支 |
示例:
```bash
git branch feature-login # 创建新分支
git switch feature-login # 切换到该分支
# 修改代码后...
git add .
git commit -m "添加登录功能"
git switch main # 切换回主分支
git merge feature-login # 合并分支
```
---
远程仓库操作
| 命令 | 说明 |
|------|------|
| `git remote -v` | 查看远程仓库地址 |
| `git push origin <分支名>` | 推送本地分支到远程 |
| `git pull origin <分支名>` | 拉取远程分支更新 |
| `git fetch` | 获取远程变更(不自动合并) |
示例:
```bash
git push origin main # 推送 main 分支到远程
git pull origin main # 拉取远程 main 分支更新
```
---
撤销变更
| 命令 | 说明 |
|------|------|
| `git restore <文件名>` | 丢弃工作区未暂存的变更 |
| `git reset --hard HEAD` | 重置工作区和暂存区到最后一次提交 |
| `git revert <commit-hash>` | 撤销某个提交(生成新提交) |
示例:
```bash
git restore script.js # 放弃 script.js 的修改
git reset --hard HEAD # 彻底回退到最后一次提交
```
---
3. Git 工作流示例
### **场景:修复 Bug 并提交**
1. 拉取最新代码
```bash
git pull origin main
```
2. 创建新分支
```bash
git branch fix-bug
git switch fix-bug
```
3. 修改代码并提交
```bash
git add .
git commit -m "修复登录页面的错误"
```
4. 推送分支到远程
```bash
git push origin fix-bug
```
5. 在 GitHub/GitLab 提交 Pull Request(PR)
→ 等待代码审查后合并到 `main` 分支。
---
4. 高级 Git 技巧
- `.gitignore`:忽略不需要版本控制的文件(如 `node_modules/`、`.env`)。
- `git stash`:临时保存未提交的变更,切换分支时使用。
- git rebase`:优化提交历史(比 `merge` 更清晰)。
- git tag`:标记重要版本
---
5. 常见问题
Q1: 提交了错误的文件怎么办?
```bash
git reset HEAD~1 # 撤销最后一次提交(保留修改)
git commit -m "新的提交" # 重新提交
```
Q2: 如何强制覆盖本地代码?
```bash
git fetch origin
git reset --hard origin/main # 强制同步远程 main 分支
```
---
6. 学习资源
- 官方文档:[git-scm.com](https://git-scm.com/)
- 交互式学习:[Learn Git Branching](https://learngitbranching.js.org/)
- GitHub Guides:[GitHub Guides](https://guides.github.com/)
---