Git 入门教程
从零开始学习 Git 版本控制系统
一、初始化 Git 配置
1. 安装 Git
安装完成后,在开始菜单中找到 Git Bash 打开。
2. 检查安装
查看 Git 版本,检测是否安装成功:
git --version
3. 配置用户信息
配置用户名和邮箱(必须):
git config --global user.name "你的名字"
git config --global user.email "[email protected]"
4. 查看配置
查看所有配置信息:
git config --global --list
5. 配置 SSH 公钥
生成 SSH 密钥
ssh-keygen -t rsa -C "[email protected]"
操作步骤:
- 第一次回车:显示密钥存放位置(默认:
~/.ssh/id_rsa) - 第二次回车:输入密码(建议直接回车,不设置密码)
- 第三次回车:确认密码
- 生成完成
查找公钥文件
- Windows:
C:\Users\你的用户名\.ssh\id_rsa.pub - Mac/Linux:
~/.ssh/id_rsa.pub
添加到 GitHub/GitLab
- 打开
id_rsa.pub文件,复制全部内容 - 登录 GitHub/GitLab
- 进入 Settings → SSH Keys
- 点击 Add SSH Key,粘贴公钥并保存
验证 SSH 配置
# GitHub
ssh -T [email protected]
# GitLab
ssh -T [email protected]
成功会显示:Hi username! You've successfully authenticated...
二、初始化仓库
方式 1:创建本地新仓库
1. 创建项目文件夹
mkdir my_project
cd my_project
2. 初始化 Git 仓库
git init
执行后会创建 .git 隐藏文件夹(Git 仓库核心,不要删除)
3. 创建文件并提交
# 创建 README 文件
touch README.md
# 添加到暂存区
git add README.md
# 提交到本地仓库
git commit -m "Initial commit"
4. 关联远程仓库(可选)
# 添加远程仓库
git remote add origin <远程仓库 URL>
# 推送到远程
git push -u origin main
5. 删除仓库
rm -rf .git
方式 2:克隆远程仓库
直接从远程服务器克隆现有仓库:
git clone <远程仓库 URL>
示例:
git clone https://github.com/username/repo.git
克隆指定分支:
git clone -b <分支名> <远程仓库 URL>
三、工作区域和文件状态
Git 的三个工作区域
工作区 (Working Directory) ↓ git add 暂存区 (Staging Area) ↓ git commit 本地仓库 (Local Repository) ↓ git push 远程仓库 (Remote Repository)
| 区域 | 说明 |
|---|---|
| 工作区 | 本地计算机上的项目目录,可以直接编辑文件 |
| 暂存区 | 临时存储区,保存即将提交的修改 |
| 本地仓库 | Git 存储项目历史记录的地方 |
| 远程仓库 | 托管在服务器上的仓库(如 GitHub) |
文件的三种状态
| 状态 | 说明 | 命令 |
|---|---|---|
| 已修改 (Modified) | 文件已修改但未暂存 | git add 进入暂存 |
| 已暂存 (Staged) | 文件已添加到暂存区 | git commit 提交 |
| 已提交 (Committed) | 文件已保存到本地仓库 | git push 推送 |
查看文件状态
git status
四、添加和提交文件
1. 创建文件
echo "Hello World" > file1.txt
2. 查看文件内容
cat file1.txt
3. 查看仓库状态
git status
4. 添加到暂存区
添加单个文件:
git add file1.txt
添加多个文件:
git add file1.txt file2.txt
添加所有 txt 文件:
git add *.txt
添加当前目录所有文件:
git add .
5. 提交到本地仓库
带提交信息:
git commit -m "提交说明"
打开编辑器编写详细信息:
git commit
一次性添加并提交(仅已跟踪文件):
git commit -am "提交说明"
6. 查看提交历史
# 查看详细历史
git log
# 单行显示
git log --oneline
# 图形化显示
git log --graph --oneline
# 查看最近 3 次提交
git log -3
五、回退版本
1. 查看提交历史
git log --oneline
输出示例:
a1b2c3d (HEAD -> main) 第三次提交
e4f5g6h 第二次提交
i7j8k9l 第一次提交
2. 回退方式对比
| 命令 | 工作区 | 暂存区 | 本地仓库 | 使用场景 |
|---|---|---|---|---|
git reset --soft | 保留 | 保留 | 回退 | 重新提交 |
git reset --mixed | 保留 | 清空 | 回退 | 重新暂存(默认) |
git reset --hard | 清空 | 清空 | 回退 | 完全放弃修改 |
3. 回退到上一个版本
回退但保留修改:
git reset --soft HEAD^
回退并取消暂存:
git reset --mixed HEAD^ # 或 git reset HEAD^
回退并丢弃所有修改:
git reset --hard HEAD^
4. 回退到指定版本
git reset --hard <commit-id>
示例:
git reset --hard e4f5g6h
5. 撤销工作区修改
# 撤销单个文件
git checkout -- file1.txt # 新版命令
git restore file1.txt
6. 取消暂存
# 取消暂存单个文件
git reset HEAD file1.txt # 新版命令
git restore --staged file1.txt
7. 查看所有操作记录
git reflog
可以找到所有提交的 commit-id,即使已经回退也能找回。
六、分支管理
1. 查看分支
# 查看本地分支
git branch
# 查看所有分支(含远程)
git branch -a
# 查看远程分支
git branch -r
2. 创建分支
git branch <分支名>
3. 切换分支
git checkout <分支名># 新版命令
git switch <分支名>
4. 创建并切换分支
git checkout -b <分支名># 新版命令
git switch -c <分支名>
5. 合并分支
# 切换到目标分支
git checkout main
# 合并指定分支到当前分支
git merge <分支名>
6. 删除分支
# 删除已合并分支
git branch -d <分支名># 强制删除分支
git branch -D <分支名>
7. 解决合并冲突
当合并出现冲突时:
# 1. 查看冲突文件
git status
# 2. 手动编辑冲突文件,删除冲突标记
<<<<<<< HEAD
当前分支的内容
=======
要合并分支的内容
>>>>>>> branch-name
# 3. 标记为已解决
git add <冲突文件>
# 4. 完成合并
git commit -m "解决冲突"
七、远程仓库操作
1. 查看远程仓库
git remote -v
2. 添加远程仓库
git remote add origin <远程仓库 URL>
3. 推送到远程
# 首次推送
git push -u origin main
# 后续推送
git push
4. 拉取远程更新
# 拉取并合并
git pull origin main
# 等同于
git fetch origin
git merge origin/main
5. 克隆远程仓库
git clone <远程仓库 URL>
6. 删除远程分支
git push origin --delete <分支名>
八、常见问题
问题 1:提交了错误的文件
解决方案:
# 撤销最后一次提交,保留修改
git reset --soft HEAD^
# 重新添加正确的文件
git add <正确的文件>
git commit -m "正确的提交"
问题 2:修改最后一次提交信息
git commit --amend -m "新的提交信息"
问题 3:忘记切换分支就开始工作
# 暂存当前工作
git stash
# 切换到正确分支
git checkout <正确分支>
# 恢复工作
git stash pop
问题 4:误删了文件
# 从暂存区恢复
git checkout -- <文件名>
# 从指定提交恢复
git checkout <commit-id> -- <文件名>
问题 5:推送被拒绝
原因:远程仓库有新提交
解决方案:
# 先拉取远程更新
git pull origin main
# 解决冲突后再推送
git push origin main
问题 6:.gitignore 不生效
原因:文件已被跟踪
解决方案:
# 从 Git 中移除但保留本地文件
git rm --cached <文件名>
# 提交更改
git commit -m "更新.gitignore"
常用.gitignore 模板
# 编译文件
*.class
*.o
*.pyc
# 日志文件
*.log
# 依赖目录
node_modules/
vendor/
# IDE 配置
.idea/
.vscode/
*.iml
# 系统文件
.DS_Store
Thumbs.db
# 环境配置
.env
config.local.js
学习资源
九、标签管理
1. 创建标签
# 创建轻量标签
git tag v1.0
# 创建附注标签(推荐)
git tag -a v1.0 -m "版本 1.0 发布"
# 为指定提交打标签
git tag -a v0.9 <commit-id> -m "版本 0.9"
2. 查看标签
# 查看所有标签
git tag
# 查看标签详情
git show v1.0
# 查看符合模式的标签
git tag -l "v1.*"
3. 推送标签
# 推送单个标签
git push origin v1.0
# 推送所有标签
git push origin --tags
4. 删除标签
# 删除本地标签
git tag -d v1.0
# 删除远程标签
git push origin --delete v1.0
十、Git 工作流
1. 集中式工作流
适合小团队,所有人在 main 分支上工作。
# 拉取最新代码
git pull origin main
# 开发并提交
git add
git commit -m "新功能"
# 推送
git push origin main
2. 功能分支工作流
每个功能在独立分支开发。
# 创建功能分支
git checkout -b feature/login
# 开发并提交
git add
git commit -m "实现登录功能"
# 推送到远程
git push origin feature/login
# 合并到 main
git checkout main
git merge feature/login
# 删除功能分支
git branch -d feature/login
3. Git Flow 工作流
适合大型项目,有明确的发布周期。
分支类型:
main:生产环境代码develop:开发分支feature/*:功能分支release/*:发布分支hotfix/*:紧急修复分支
# 从 develop 创建功能分支
git checkout -b feature/new-feature develop
# 完成后合并回 develop
git checkout develop
git merge feature/new-feature
# 准备发布
git checkout -b release/1.0 develop
# 发布后合并到 main 和 develop
git checkout main
git merge release/1.0
git tag -a v1.0 -m "版本 1.0"
git checkout develop
git merge release/1.0
十一、高级技巧
1. 暂存工作区
# 暂存当前修改
git stash
# 查看暂存列表
git stash list
# 恢复最近的暂存
git stash pop
# 恢复指定暂存
git stash apply stash@{0}
# 删除暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear
2. 修改提交历史
# 修改最后一次提交
git commit --amend -m "新的提交信息"
# 合并最近 3 次提交
git rebase -i HEAD~3 # 在编辑器中将 pick 改为 squash
3. 查看差异
# 查看工作区与暂存区差异
git diff
# 查看暂存区与仓库差异
git diff --staged
# 查看两个分支差异
git diff branch1 branch2
# 查看指定文件差异
git diff file.txt
4. 文件操作
# 重命名文件
git mv old.txt new.txt
# 删除文件
git rm file.txt
# 仅从 Git 删除,保留本地
git rm --cached file.txt
5. 查找提交
# 按作者查找
git log --author="张三"
# 按日期查找
git log --since="2025-01-01" --until="2025-12-31"
# 按提交信息查找
git log --grep="修复"
# 查看文件修改历史
git log --follow file.txt
# 查看谁修改了某行代码
git blame file.txt
十二、团队协作
1. Fork 工作流
# 1. Fork 项目到自己账号
# 2. 克隆 Fork 的仓库
git clone <你的 Fork 仓库 URL>
# 3. 添加上游仓库
git remote add upstream <原始仓库 URL>
# 4. 创建功能分支
git checkout -b feature/new-feature
# 5. 提交修改
git add
git commit -m "新功能"
git push origin feature/new-feature
# 6. 在 GitHub 上创建 Pull Request
# 7. 同步上游更新
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
2. Pull Request 流程
- Fork 项目
- 创建功能分支
- 提交代码
- 推送到自己的仓库
- 创建 Pull Request
- 代码审查
- 合并或修改
3. Code Review 最佳实践
- 提交前自己先 review 一遍
- PR 描述清晰,说明改动原因
- 保持 PR 小而专注
- 及时响应 review 意见
- 使用有意义的 commit message
快速参考
常用命令速查
| 命令 | 说明 |
|---|---|
git init | 初始化仓库 |
git clone <url> | 克隆仓库 |
git status | 查看状态 |
git add . | 添加所有文件 |
git commit -m "msg" | 提交 |
git push | 推送 |
git pull | 拉取 |
git branch | 查看分支 |
git checkout -b <name> | 创建并切换分支 |
git merge <branch> | 合并分支 |
git log --oneline | 查看历史 |
git reset --hard <id> | 回退版本 |
git stash | 暂存工作 |
提交信息规范
<type>(<scope>): <subject>
<body>
<footer>
type 类型:
feat:新功能fix:修复 bugdocs:文档更新style:代码格式refactor:重构test:测试chore:构建/工具
示例:
feat(login): 添加记住密码功能
- 添加记住密码复选框
- 实现本地存储逻辑
- 添加自动登录功能
Closes #123
下一步
学完本教程后,建议:
- 实际创建一个项目练习
- 学习更多高级命令(参考 Git 命令速查手册)
- 了解 Git 工作流(Git Flow、GitHub Flow)
- 学习团队协作(Pull Request、Code Review)
- 掌握 Git Hooks 自动化工作流


