00:00:00
🚀 Git 初识和使用 - 从入门到实践
📚 学习路线
Git基础概念 → 安装配置 → 核心命令 → 分支管理 → 团队协作
💡 为什么要学Git? Git是目前世界上最先进的分布式版本控制系统,被广泛应用于软件开发、文档管理等领域。掌握Git是每个开发者的必备技能。
📖 什么是 Git?
定义
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
核心特点
| 特点 | 说明 | 优势 |
|---|---|---|
| 🌐 分布式 | 每个开发者都拥有完整的代码仓库 | 离线工作,安全可靠 |
| ⚡ 高性能 | 本地操作,速度极快 | 提交、分支切换都是秒级 |
| 🔄 分支管理 | 轻量级分支系统 | 方便并行开发和实验 |
| 🔒 数据完整性 | SHA-1哈希保证数据完整 | 防止数据损坏和篡改 |
| 👥 团队协作 | 支持多人协同开发 | 代码合并、冲突解决 |
🆚 Git vs 其他版本控制系统
对比表
| 对比项 | Git (分布式) | SVN (集中式) |
|---|---|---|
| 存储方式 | 完整克隆 | 部分检出 |
| 网络依赖 | ✅ 离线可用 | ❌ 需要联网 |
| 分支操作 | ⚡ 极快 | 🐢 较慢 |
| 存储空间 | 📦 较大 | 💾 较小 |
| 学习曲线 | 📈 稍陡 | 📉 平缓 |
| 流行度 | 🔥 极高 | 📉 下降 |
为什么选择Git?
- ✅ 业界标准,GitHub、GitLab等平台支持
- ✅ 强大的分支管理能力
- ✅ 活跃的社区和丰富的工具生态
- ✅ 适合分布式团队协作
💻 安装 Git
Windows 系统
方法一:官方安装包
- 访问 Git官网
- 下载 Windows 版本
- 运行安装程序,推荐选项:
- ✅ Git Bash Here (右键菜单集成)
- ✅ Use Visual Studio Code as Git's default editor
- ✅ Override the default branch name (设为 main)
- ✅ Git from the command line and also from 3rd-party software
方法二:使用 Chocolatey
powershell
# 使用包管理器安装
choco install git -y验证安装:
bash
git --version
# 输出: git version 2.43.0macOS 系统
方法一:使用 Homebrew(推荐)
bash
# 安装 Git
brew install git
# 验证安装
git --version方法二:Xcode Command Line Tools
bash
xcode-select --installLinux 系统
Debian/Ubuntu:
bash
sudo apt update
sudo apt install git -yCentOS/RHEL:
bash
sudo yum install git -y
# 或
sudo dnf install git -yArch Linux:
bash
sudo pacman -S git验证安装:
bash
git --version⚙️ Git 初始配置
必须配置:用户信息
每次Git提交都会使用这些信息,它们会写入到每一次提交中:
bash
# 设置用户名
git config --global user.name "Your Name"
# 设置邮箱
git config --global user.email "your.email@example.com"推荐配置
bash
# 设置默认分支名为 main
git config --global init.defaultBranch main
# 设置默认编辑器为 VS Code
git config --global core.editor "code --wait"
# 启用颜色显示
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 --graph --oneline --decorate --all"查看配置
bash
# 查看所有配置
git config --list
# 查看特定配置
git config user.name
git config user.email配置文件位置:
- 🌐 系统级:
/etc/gitconfig - 👤 全局级:
~/.gitconfig或~/.config/git/config - 📁 仓库级:
.git/config
🎯 Git 核心概念
三个工作区域
┌─────────────────┐
│ 工作目录 │ ← 你实际编辑文件的地方
│ (Working Dir) │
└────────┬────────┘
│ git add
↓
┌─────────────────┐
│ 暂存区 │ ← 临时存储即将提交的修改
│ (Staging Area) │
└────────┬────────┘
│ git commit
↓
┌─────────────────┐
│ Git仓库 │ ← 永久保存的版本历史
│ (Repository) │
└─────────────────┘文件状态
| 状态 | 说明 | 图标 |
|---|---|---|
| Untracked | 未跟踪,新文件 | 🆕 |
| Unmodified | 未修改,已提交 | ✅ |
| Modified | 已修改,未暂存 | ✏️ |
| Staged | 已暂存,待提交 | 📦 |
🛠️ Git 基础命令
创建仓库
方法一:初始化新仓库
bash
# 创建项目目录
mkdir my-project
cd my-project
# 初始化 Git 仓库
git init
# 结果:创建 .git 隐藏目录方法二:克隆现有仓库
bash
# 克隆远程仓库
git clone https://github.com/username/repository.git
# 克隆到指定目录
git clone https://github.com/username/repository.git my-folder
# 克隆指定分支
git clone -b branch-name https://github.com/username/repository.git基本操作流程
1️⃣ 查看状态
bash
# 查看工作区状态
git status
# 简洁模式
git status -s输出示例:
On branch main
Changes not staged for commit:
modified: README.md
Untracked files:
newfile.txt2️⃣ 添加文件到暂存区
bash
# 添加单个文件
git add README.md
# 添加多个文件
git add file1.txt file2.txt
# 添加所有修改(推荐)
git add .
# 添加所有.js文件
git add *.js
# 交互式添加
git add -i3️⃣ 提交更改
bash
# 提交暂存区的文件
git commit -m "提交说明"
# 提交所有已跟踪文件的修改(跳过 git add)
git commit -a -m "提交说明"
# 修改上次提交
git commit --amend -m "新的提交说明"提交信息规范(推荐):
<type>(<scope>): <subject>
type: feat新功能 | fix修复 | docs文档 | style格式 | refactor重构 | test测试 | chore构建
示例:
feat(user): 添加用户登录功能
fix(api): 修复数据接口返回错误
docs(readme): 更新安装说明4️⃣ 查看提交历史
bash
# 查看提交历史
git log
# 单行显示
git log --oneline
# 图形化显示分支
git log --graph --oneline --all
# 查看最近3次提交
git log -3
# 查看每次提交的差异
git log -p
# 查看统计信息
git log --stat🔄 文件操作
查看差异
bash
# 查看工作区与暂存区的差异
git diff
# 查看暂存区与仓库的差异
git diff --staged
# 或
git diff --cached
# 查看两次提交的差异
git diff commit1 commit2
# 查看特定文件的差异
git diff README.md撤销操作
bash
# 撤销工作区的修改(危险操作!)
git checkout -- filename
# 或使用新命令
git restore filename
# 取消暂存(保留工作区修改)
git reset HEAD filename
# 或使用新命令
git restore --staged filename
# 撤销最近一次提交(保留修改)
git reset --soft HEAD~1
# 撤销最近一次提交(不保留修改,危险!)
git reset --hard HEAD~1删除和重命名
bash
# 删除文件(同时从工作区和暂存区删除)
git rm filename
# 只从Git删除,保留本地文件
git rm --cached filename
# 重命名文件
git mv old-name new-name
# 等同于:
# mv old-name new-name
# git rm old-name
# git add new-name🌿 分支管理
为什么要使用分支?
- 🔀 并行开发:多个功能同时开发互不影响
- 🧪 实验性功能:在独立分支上测试新想法
- 🐛 紧急修复:快速修复线上bug
- 👥 团队协作:每个人在自己的分支上工作
分支操作
bash
# 查看所有分支
git branch
# 查看所有分支(包括远程)
git branch -a
# 创建新分支
git branch feature-login
# 切换分支
git checkout feature-login
# 创建并切换分支(简写)
git checkout -b feature-login
# 或使用新命令
git switch feature-login
git switch -c feature-login
# 重命名分支
git branch -m old-name new-name
# 删除分支
git branch -d feature-login
# 强制删除未合并的分支
git branch -D feature-login合并分支
bash
# 合并指定分支到当前分支
git merge feature-login
# 不使用快进模式合并(保留分支信息)
git merge --no-ff feature-login
# 查看已合并的分支
git branch --merged
# 查看未合并的分支
git branch --no-merged解决合并冲突
当两个分支修改了同一文件的同一部分时,会产生冲突:
bash
# 1. 合并时出现冲突
git merge feature-branch
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt
# 2. 查看冲突文件
git status
# 3. 手动编辑冲突文件
# <<<<<<< HEAD
# 当前分支的内容
# =======
# 要合并分支的内容
# >>>>>>> feature-branch
# 4. 标记为已解决
git add file.txt
# 5. 完成合并
git commit -m "解决合并冲突"🌐 远程仓库
查看远程仓库
bash
# 查看远程仓库
git remote
# 查看远程仓库详细信息
git remote -v
# 查看远程仓库详情
git remote show origin添加远程仓库
bash
# 添加远程仓库
git remote add origin https://github.com/username/repo.git
# 修改远程仓库URL
git remote set-url origin git@github.com:username/repo.git
# 删除远程仓库
git remote rm origin推送和拉取
bash
# 推送到远程仓库
git push origin main
# 首次推送并设置上游分支
git push -u origin main
# 推送所有分支
git push --all origin
# 拉取远程更新
git pull origin main
# 等同于:
# git fetch origin
# git merge origin/main
# 只获取不合并
git fetch origin
# 使用rebase方式拉取
git pull --rebase origin main远程分支操作
bash
# 查看远程分支
git branch -r
# 跟踪远程分支
git checkout -b local-branch origin/remote-branch
# 或简写(Git会自动跟踪)
git checkout remote-branch
# 推送本地分支到远程
git push origin local-branch:remote-branch
# 删除远程分支
git push origin --delete remote-branch
# 或
git push origin :remote-branch🔖 标签管理
创建标签
bash
# 创建轻量标签
git tag v1.0.0
# 创建附注标签(推荐)
git tag -a v1.0.0 -m "版本 1.0.0 发布"
# 为特定提交创建标签
git tag -a v0.9.0 commit-hash -m "版本 0.9.0"
# 查看所有标签
git tag
# 查看标签详情
git show v1.0.0推送和删除标签
bash
# 推送单个标签到远程
git push origin v1.0.0
# 推送所有标签
git push origin --tags
# 删除本地标签
git tag -d v1.0.0
# 删除远程标签
git push origin --delete v1.0.0
# 或
git push origin :refs/tags/v1.0.0📝 .gitignore 文件
什么是 .gitignore?
.gitignore 文件用于指定Git应该忽略的文件,这些文件不会被跟踪和提交。
常用规则
gitignore
# 忽略所有 .log 文件
*.log
# 忽略所有 node_modules 目录
node_modules/
# 忽略 dist 目录
dist/
build/
# 忽略所有 .env 文件
.env
.env.local
# 忽略 IDE 配置
.vscode/
.idea/
*.swp
# 但不忽略特定文件
!important.log
# 只忽略当前目录的 TODO 文件
/TODO
# 忽略所有 doc 目录下的 .txt 文件
doc/**/*.txt常见项目模板
Node.js 项目:
gitignore
node_modules/
npm-debug.log
.env
dist/
.DS_StorePython 项目:
gitignore
__pycache__/
*.py[cod]
*.so
.Python
env/
venv/
.envJava 项目:
gitignore
*.class
*.jar
*.war
target/
.idea/已跟踪文件处理
如果文件已经被Git跟踪,需要先从索引中删除:
bash
# 删除已跟踪的文件(保留本地文件)
git rm --cached filename
# 删除整个目录
git rm -r --cached directory/
# 提交更改
git commit -m "删除不需要跟踪的文件"🎓 实战练习
练习1:创建第一个Git项目
bash
# 1. 创建项目目录
mkdir my-first-git-project
cd my-first-git-project
# 2. 初始化Git仓库
git init
# 3. 创建README文件
echo "# My First Git Project" > README.md
# 4. 添加到暂存区
git add README.md
# 5. 提交
git commit -m "初始提交:添加README"
# 6. 查看历史
git log练习2:分支工作流
bash
# 1. 创建并切换到开发分支
git checkout -b develop
# 2. 创建功能分支
git checkout -b feature/user-login
# 3. 开发功能并提交
echo "用户登录功能" > login.js
git add login.js
git commit -m "feat: 添加用户登录功能"
# 4. 切换回develop分支
git checkout develop
# 5. 合并功能分支
git merge feature/user-login
# 6. 删除功能分支
git branch -d feature/user-login练习3:与GitHub协作
bash
# 1. 在GitHub创建仓库
# 2. 关联远程仓库
git remote add origin git@github.com:username/repo.git
# 3. 推送到远程
git push -u origin main
# 4. 修改文件并提交
echo "更新内容" >> README.md
git add README.md
git commit -m "docs: 更新README"
# 5. 推送更新
git push origin main
# 6. 拉取其他人的更新
git pull origin main💡 Git 最佳实践
✅ 提交相关
频繁提交,小步快跑
- 每完成一个小功能就提交
- 避免一次提交包含多个不相关的修改
写清晰的提交信息
✅ 好的提交信息: feat(auth): 添加用户登录功能 fix(api): 修复用户数据接口返回值错误 ❌ 不好的提交信息: 修改了一些东西 update提交前先拉取
bashgit pull --rebase origin main git push origin main
✅ 分支相关
使用有意义的分支名
✅ 好的分支名: feature/user-authentication bugfix/login-error hotfix/security-patch ❌ 不好的分支名: test temp new-branch保持main分支稳定
- main/master 分支应该始终是可发布的
- 开发在 develop 或功能分支上进行
及时删除已合并的分支
bashgit branch --merged | grep -v "\*\|main\|develop" | xargs -n 1 git branch -d
✅ 协作相关
使用 Pull Request / Merge Request
- 代码审查
- 讨论和改进
- 保证代码质量
解决冲突时保持冷静
- 仔细查看冲突内容
- 与团队成员沟通
- 测试合并后的代码
不要提交敏感信息
- 密码、密钥
- API Token
- 数据库连接字符串
- 使用 .gitignore 和环境变量
🚨 常见问题
❓ 如何撤销已经push的提交?
bash
# 方法1: 使用 revert(推荐,安全)
git revert commit-hash
git push origin main
# 方法2: 使用 reset(谨慎使用!)
git reset --hard HEAD~1
git push -f origin main # 强制推送❓ 误删了文件怎么恢复?
bash
# 恢复工作区的文件
git checkout -- filename
# 或
git restore filename
# 从特定提交恢复
git checkout commit-hash -- filename❓ 如何修改已经push的提交信息?
bash
# 修改最后一次提交
git commit --amend -m "新的提交信息"
git push -f origin branch-name # 强制推送❓ 如何暂存当前工作?
bash
# 暂存当前修改
git stash
# 查看暂存列表
git stash list
# 恢复最近的暂存
git stash pop
# 恢复特定的暂存
git stash apply stash@{0}
# 删除暂存
git stash drop stash@{0}🔗 推荐资源
📚 学习资源
- 📖 Pro Git 中文版 - 官方权威教程
- 🎮 Learn Git Branching - 交互式学习
- 📺 Git教学视频 - B站热门教程
- 📝 Git Flight Rules - 问题解决手册
🛠️ 实用工具
- 🌐 GitHub - 最大的Git托管平台
- 🦊 GitLab - 开源Git平台
- 🪣 Bitbucket - Atlassian的Git平台
- 🖥️ GitKraken - Git GUI客户端
- 🌳 SourceTree - 免费Git客户端
📱 浏览器扩展
- Octotree - GitHub代码树
- Enhanced GitHub - GitHub增强
- GitZip - 下载GitHub仓库子目录
📊 Git 命令速查表
| 操作 | 命令 |
|---|---|
| 📁 初始化仓库 | git init |
| 📥 克隆仓库 | git clone <url> |
| 📝 查看状态 | git status |
| ➕ 添加文件 | git add <file> |
| 💾 提交 | git commit -m "message" |
| 📜 查看历史 | git log |
| 🔍 查看差异 | git diff |
| 🌿 创建分支 | git branch <name> |
| 🔀 切换分支 | git checkout <name> |
| 🔗 合并分支 | git merge <name> |
| ⬆️ 推送 | git push origin <branch> |
| ⬇️ 拉取 | git pull origin <branch> |
| 🏷️ 创建标签 | git tag -a <tag> -m "msg" |
| 💾 暂存工作 | git stash |
| ↩️ 撤销修改 | git restore <file> |
🎉 恭喜!
你已经掌握了Git的基础知识!
现在可以开始在实际项目中使用Git了。
记住:熟能生巧,多练习才能真正掌握!
📝 最后更新: 2025-10-19
🎓 难度级别: 入门 → 进阶
⏱️ 预计学习时间: 2-3小时
下一步:学习 Git 高级配置和团队协作工作流!
