1. 仓库初始化:git init
作用:将普通目录转换为Git仓库(创建.git隐藏目录)
场景:
- 本地新建项目时初始化
- 将已有项目纳入Git管理
# 创建新项目目录并初始化
mkdir my-project
cd my-project
git init
# 输出:Initialized empty Git repository in /path/to/my-project/.git/
# 查看隐藏的.git目录(存储所有版本数据)
ls -la .git
2. 克隆仓库:git clone
作用:完整复制远程仓库到本地(包含所有历史记录)
参数:
--depth 1:浅克隆(只获取最新版本,节省空间)-b <branch>:克隆指定分支
# 克隆GitHub仓库(默认克隆main分支)
git clone https://github.com/user/repo.git
# 克隆特定分支(如dev分支)
git clone -b dev https://github.com/user/repo.git
# 浅克隆大型仓库(仅最近提交)
git clone --depth 1 https://github.com/vuejs/vue.git
3. 状态检查:git status
作用:查看工作区和暂存区文件状态
输出符号说明:
??:未跟踪文件A:新添加到暂存区M:已修改文件D:已删除文件
# 基础用法
git status
# 简洁模式(-s参数)
git status -s
# 输出示例:
# M modified_file.txt <- 已修改未暂存
# A new_file.txt <- 新文件已暂存
# ?? untracked_file.js <- 未跟踪文件
4. 文件暂存:git add
作用:将文件修改添加到暂存区(准备提交)
高级用法:
# 添加所有更改(包括未跟踪文件)
git add .
# 添加特定文件
git add index.html style.css
# 交互式添加(-p参数)
git add -p
# 系统会逐个显示修改块,询问是否暂存
# 输入 y 暂存 / n 跳过 / s 拆分修改块
# 添加所有已跟踪文件的修改(不包括新文件)
git add -u
5. 提交更改:git commit
作用:将暂存区内容永久保存到本地仓库
关键参数:
-m "消息":直接提交--amend:修改最近一次提交-a:跳过git add步骤(自动暂存所有已跟踪文件的修改)
# 标准提交
git commit -m "修复登录页面样式问题"
# 修改上次提交(追加更改到上次提交)
git add forgotten_file.js
git commit --amend -m "修复登录逻辑和样式"
# 自动提交所有已跟踪文件的修改(跳过add)
git commit -a -m "快速提交所有修改"
6. 提交历史:git log
作用:查看提交历史记录
实用参数组合:
# 单行显示(提交ID+信息)
git log --oneline
# 输出:c3f2e9a (HEAD -> main) 更新配置文件
# 图形化显示分支结构
git log --graph --all --decorate
# 查看特定文件的修改历史
git log -p README.md
# 按作者筛选
git log --author="John"
# 按时间筛选(最近2周)
git log --since="2 weeks ago"
7. 版本回退:git reset
作用:撤销提交到指定状态(三种模式)
| 模式 | 影响范围 | 使用场景 |
|---|---|---|
--soft | 仅移动HEAD指针 | 重新组织提交 |
--mixed | 重置暂存区(默认) | 撤销add操作 |
--hard | 重置工作区 | 彻底丢弃修改 |
# 查看提交ID
git log --oneline
# 输出:a1b2c3d 添加新功能
# 软重置(保留修改在暂存区)
git reset --soft a1b2c3d
# 混合重置(保留修改在工作区)
git reset --mixed a1b2c3d
# 硬重置(彻底丢弃所有修改)
git reset --hard a1b2c3d
⚠️ 警告:
--hard会永久删除未提交的修改!慎用!
8. 操作日志:git reflog
作用:记录所有HEAD指针移动历史(找回误操作的关键)
场景:
- 找回被
reset --hard删除的提交 - 恢复误删的分支
# 查看所有操作记录
git reflog
# 输出示例:
# a1b2c3d (HEAD -> main) HEAD@{0}: reset: moving to HEAD~1
# d4e5f6a HEAD@{1}: commit: 添加重要功能
# 恢复到误删前的状态
git reset --hard HEAD@{1}
9. 分支操作:git branch & git checkout
核心命令:
# 查看所有分支(*表示当前分支)
git branch -v
# 创建新分支
git branch feature-payment
# 切换分支
git checkout feature-payment
# 创建并切换分支(组合命令)
git checkout -b hotfix
# 删除已合并分支
git branch -d feature-old
# 强制删除未合并分支
git branch -D experimental
10. 临时存储:git stash
作用:临时保存工作区未提交的修改
使用场景:
- 紧急修复其他分支的bug
- 切换分支前保存当前进度
# 存储当前修改(默认存储)
git stash
# 存储时添加描述
git stash save "正在开发购物车功能"
# 查看存储列表
git stash list
# 输出:stash@{0}: On main: 正在开发购物车功能
# 恢复最近存储(保留存储记录)
git stash apply
# 恢复指定存储(如stash@{1})
git stash apply stash@{1}
# 恢复并删除存储
git stash pop
11. 远程操作:git remote
作用:管理远程仓库连接
# 添加远程仓库(通常命名为origin)
git remote add origin https://github.com/user/repo.git
# 查看远程仓库详情
git remote -v
# 输出:
# origin https://github.com/user/repo.git (fetch)
# origin https://github.com/user/repo.git (push)
# 重命名远程仓库
git remote rename origin upstream
# 移除无效远程连接
git remote remove upstream
12. 推送更新:git push
作用:将本地提交推送到远程仓库
常见用法:
# 首次推送(设置上游分支)
git push -u origin main
# 后续推送(简化命令)
git push
# 强制推送(覆盖远程历史,慎用!)
git push -f
# 删除远程分支
git push origin --delete feature-old
# 推送标签
git push --tags
13. 获取更新:git fetch & git pull
区别:
| 命令 | 行为 | 安全等级 |
|---|---|---|
git fetch | 仅下载远程更新 | ★★★★★ |
git pull | 下载+自动合并 | ★★★☆☆ |
# 安全做法:先fetch再手动合并
git fetch origin # 下载更新
git diff origin/main # 查看差异
git merge origin/main # 合并到当前分支
# 快速更新(等价于fetch+merge)
git pull origin main
# 使用rebase避免多余合并记录
git pull --rebase origin main
14. 分支合并:git merge
作用:将指定分支合并到当前分支
合并策略:
# 普通合并(创建合并提交)
git checkout main
git merge feature-login
# 快进合并(当分支线性时)
git merge --ff-only feature
# 禁止快进(强制创建合并提交)
git merge --no-ff feature
# 遇到冲突时终止合并
git merge --abort
15. 精选提交:git cherry-pick
作用:复制特定提交到当前分支
场景:
- 将修复补丁应用到多个分支
- 移植特定功能提交
# 查看提交ID
git log --oneline --all
# 复制指定提交(如a1b2c3d)
git cherry-pick a1b2c3d
# 复制多个连续提交
git cherry-pick commitA..commitC # 不包含commitA
# 复制包含合并提交
git cherry-pick -m 1 mergeCommit
16. 版本标签:git tag
作用:标记重要版本(如发布版本)
# 创建轻量标签
git tag v1.0.0
# 创建含注释的标签
git tag -a v1.1.0 -m "正式发布稳定版"
# 查看所有标签
git tag -l
# 查看标签详情
git show v1.1.0
# 删除本地标签
git tag -d v0.9
17. 重写历史:git rebase
作用:重新应用提交(保持历史线性)
黄金法则:仅对尚未推送的提交使用rebase!
# 将当前分支变基到main分支
git checkout feature
git rebase main
# 交互式变基(修改最近3次提交)
git rebase -i HEAD~3
# 操作选项:
# p, pick = 使用提交
# r, reword = 修改提交信息
# s, squash = 合并到前一个提交
# d, drop = 删除提交
命令总结表
| 类别 | 命令 | 关键用途 | 危险等级 |
|---|---|---|---|
| 基础操作 | init clone | 创建/获取仓库 | ★☆☆☆☆ |
| 日常工作流 | status add commit | 提交代码 | ★☆☆☆☆ |
| 历史管理 | log reflog | 查看历史/找回操作 | ★★☆☆☆ |
| 撤销操作 | reset | 版本回退 | ★★★★☆ |
| 分支管理 | branch checkout | 多分支开发 | ★★☆☆☆ |
| 临时存储 | stash | 保存工作现场 | ★☆☆☆☆ |
| 远程协作 | remote push fetch pull | 团队协作 | ★★★☆☆ |
| 代码整合 | merge rebase cherry-pick | 合并代码 | ★★★★☆ |
| 版本标记 | tag | 发布管理 | ★☆☆☆☆ |
💡 最佳实践建议:
- 提交前用
git diff --cached检查暂存区内容- 使用
git pull --rebase代替普通 pull 保持历史整洁- 频繁使用
git stash管理未完成的工作- 重要操作前用
git branch backup创建备份分支