# git-practice **Repository Path**: luoyuxin7759/git-practice ## Basic Information - **Project Name**: git-practice - **Description**: 专门用来练习GIT指令的仓库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-23 - **Last Updated**: 2025-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git Practice ## 仓库说明 本仓库专门用于练习 Git 常用指令,无实际业务代码,仅作为个人 Git 学习、试错的「沙箱」。 ## 练习目标 - 熟悉 Git 核心指令(分支、提交、推送、合并、变基等) - 理解 Git 工作流(如分支管理、冲突解决) - 避免在真实项目中误操作 Git ## 初始化操作 ```bash # 初始化仓库 git init # 关联远程仓库 git remote add origin 远程仓库地址 # 将文件添加到暂存区 刚开始创建的仓库可以新建一个README.md文档 # git add . 表示当所有文件添加到暂存区 git add README.md | git add . # 提交到本地仓库 (本地仓库就是.git目录里面) # 提交信息最好用双引号报告,里面出现空格才不会报错 git commit -m "提交信息" # 推送到远程仓库 # -u是 --set-upstream的简写,就是将本地分支和远程分支进行绑定建立上游追踪关系 # origin 是远程仓库的地址别名 git push -u origin 远程分支名称 ``` ## 先理解 Git 核心概念 > 在学指令前,先搞懂 Git 的底层逻辑,指令只是 “操作入口”:
| 核心概念 | 通俗解释 |
|---|---|
| 工作区(Workspace) | 本地写代码的文件夹(你实际编辑文件的地方) |
| 暂存区(Index/Stage) | 临时存储待提交的修改(“待办清单”,标记哪些文件要提交) |
| 本地仓库(Repository) | 本地的Git数据库(保存所有提交记录,.git 文件夹) |
| 远程仓库(Remote) | 云端仓库(GitHub/GitLab/Gitee,用于协作和备份) |
| 提交(Commit) | 把暂存区的修改保存到本地仓库(生成唯一版本号,可回滚) |
| 分支(Branch) | 独立的开发线(比如 master/main 主分支、dev 开发分支、feature 功能分支) |
| 合并(Merge) | 把一个分支的修改合并到另一个分支(比如功能开发完合并到主分支) |
| 克隆(Clone)/拉取(Pull)/推送(Push) | 本地和远程仓库的同步操作(Clone 下载、Pull 拉取更新、Push 推送本地修改) |
| 指令 | 作用 | 实操场景 |
|---|---|---|
| git init | 在当前文件夹初始化 Git 仓库(生成 .git 文件夹) | 新建项目时:mkdir todo && cd todo && git init |
| git config --global user.name "你的名字" | 配置全局用户名(提交记录会显示) | 首次安装 Git 必配 |
| git config --global user.email "你的邮箱" | 配置全局邮箱(和远程仓库账号一致) | 首次安装 Git 必配 |
| git config --list | 查看当前 Git 配置 | 验证配置是否正确 |
| 指令 | 作用 | 关键说明 |
|---|---|---|
| git status | 查看工作区 / 暂存区状态(哪些文件修改、未跟踪、已暂存) | 每次操作前先执行,明确当前状态 |
| git diff | 查看工作区和暂存区的文件差异(未暂存的修改) | 看具体改了哪些内容 |
| git diff --cached | 查看暂存区和本地仓库的差异(已暂存待提交的修改) | 确认暂存的内容是否正确 |
| 指令 | 作用 | 实操示例 |
|---|---|---|
| git add 文件名 | 将指定文件从工作区加入暂存区 | git add todo.dart(单文件) |
| git add . | 将所有修改 / 新增文件加入暂存区(不含删除) | 批量暂存,开发中常用 |
| git add -A | 将所有修改 / 新增 / 删除文件加入暂存区(完整暂存) | 比 git add . 更全面 |
| git commit -m "提交说明" | 将暂存区内容提交到本地仓库(必须写有意义的说明) | git commit -m "新增待办输入框组件" |
| git commit -am "提交说明" | 跳过暂存区,直接提交工作区已跟踪的文件(修改 / 删除) | 快速提交,无需先 git add |
| git rm 文件名 | 删除文件并加入暂存区(等价于手动删文件 + git add 文件名) | git rm old_todo.dart |
| git mv 旧文件名 新文件名 | 重命名文件并加入暂存区 | git mv todo.dart todo_item.dart |
| 指令 | 作用 | 适用场景 |
|---|---|---|
| git checkout -- 文件名 | 撤销工作区的修改(恢复到暂存区 / 本地仓库的版本) | 改乱文件想还原 |
| git reset HEAD 文件名 | 将暂存区的文件撤回工作区(取消暂存) | 误加暂存,想取消 |
| git reset --hard 提交ID | 回滚本地仓库到指定版本(工作区 / 暂存区也同步回滚) | 提交错误,彻底回滚 |
| git log | 查看提交记录(版本号、作者、时间、说明) | 找要回滚的提交 ID(复制前 7 位) |
| git log --oneline | 简化提交记录(一行显示,仅版本号前 7 位 + 说明) | 快速查看提交历史 |
| 指令 | 作用 | 实操示例 |
|---|---|---|
| git clone 远程仓库地址 | 克隆远程仓库到本地(含所有分支和提交记录) | git clone https://github.com/xxx/todo.git |
| git remote add origin 远程仓库地址 | 将本地仓库关联到远程仓库(命名为 origin) | 本地初始化后关联远程 |
| git remote -v | 查看已关联的远程仓库地址(fetch/push 地址) | 验证远程仓库是否正确 |
| git remote remove origin | 移除已关联的远程仓库 | 关联错误时修改 |
| 指令 | 作用 | 注意事项 |
|---|---|---|
| git pull | 拉取远程仓库的最新代码并合并到本地当前分支(等价于 git fetch + git merge) | 推送前先拉取,避免冲突 |
| git pull origin 分支名 | 拉取指定远程分支到本地当前分支 | git pull origin dev |
| git push origin 分支名 | 将本地分支推送到远程仓库 | git push origin main |
| git push -u origin 分支名 | 推送并关联本地分支和远程分支(后续可直接 git push) | 首次推送新分支时用 |
| 指令 | 作用 | 实操场景 |
|---|---|---|
| git branch | 查看本地所有分支(* 标记当前分支) | 确认当前所在分支 |
| git branch 分支名 | 创建新分支(基于当前分支) | git branch feature/add-todo(开发新功能) |
| git checkout 分支名 | 切换到指定分支 | git checkout feature/add-todo |
| git checkout -b 分支名 | 创建并切换到新分支(常用) | git checkout -b bugfix/checkbox(修复 bug) |
| git merge 分支名 | 将指定分支合并到当前分支 | 功能开发完,合并到 dev 分支 |
| git branch -d 分支名 | 删除本地已合并的分支 | 功能上线后删除 feature 分支 |
| git branch -D 分支名 | 强制删除本地未合并的分支 | 放弃开发的分支 |
| git fetch | 拉取远程仓库的分支 / 提交记录(不合并) | 先看远程更新,再决定是否合并 |
| git remote update origin --prune | 是一个组合操作指令,核心是「更新本地的远程分支引用 + 清理无效引用」 | 远程分支和本地分支信息不一致的时候使用 |
| 指令 | 作用 | 适用场景 |
|---|---|---|
| git stash | 将未提交的修改暂存到 “暂存栈”(工作区回到干净状态) | 开发中临时切换分支,不想提交 |
| git stash list | 查看暂存栈中的所有记录 | 确认暂存的内容 |
| git stash apply | 恢复最近一次暂存的修改(暂存栈仍保留) | 回到之前的开发状态 |
| git stash pop | 恢复最近一次暂存的修改并删除暂存栈记录 | 常用,恢复后清空暂存 |
| git stash drop | 删除指定暂存记录 | 不需要的暂存内容 |
| 指令 | 作用 | 实操示例 |
|---|---|---|
| git tag v1.0.0 | 给当前提交打标签(标记版本发布) | 发布 TodoList v1.0 时用 |
| git tag | 查看所有标签 | 确认已打标签 |
| git push origin v1.0.0 | 推送标签到远程仓库 | 同步版本标记- |
| 指令 | 核心作用 | 适用场景 |
|---|---|---|
| 一、基础查看 | ||
git log |
显示当前分支可达的所有提交(完整信息:哈希、作者、日期、提交信息) | 快速看当前分支全量历史 |
git log --oneline |
每个提交仅显示一行(短哈希+提交信息) | 快速浏览提交脉络 |
git log -n <数字>(例: git log -n 5) |
仅显示最近 N 个提交 | 查看最新几次修改 |
| 二、分支/范围筛选 | ||
git log <分支名>(例: git log dev) |
查看指定分支的所有提交 | 看其他分支的提交历史 |
git log --all |
显示仓库中所有分支的所有提交 | 全局视角看所有分支历史 |
git log <分支A>..<分支B>(例: git log master..dev) |
显示分支 B 有、但分支 A 没有的提交 | 看 dev 比 master 多了哪些提交 |
git log <分支A>...<分支B> |
显示 A 和 B 彼此独有的提交(双向差异) | 对比两个分支的差异提交 |
git log --first-parent |
仅跟踪当前分支的“主父提交”(忽略合并分支的历史) | 只看当前分支自身的提交 |
| 三、图形化展示 | ||
git log --graph |
用 ASCII 图形展示分支合并关系 | 可视化分支分叉/合并脉络 |
git log --graph --oneline --all |
图形化 + 单行 + 全分支(最常用) | 全局可视化所有分支历史 |
git log --graph --oneline --decorate |
图形化 + 单行 + 标注分支/标签指向 | 看提交属于哪个分支/标签 |
| 四、内容筛选 | ||
git log -- <文件名>(例: git log -- main.dart) |
仅显示修改了指定文件的提交 | 看某个文件的所有修改记录 |
git log -S <关键词> |
搜索提交中“新增/删除包含该关键词代码”的提交 | 找某个功能/变量的修改记录 |
git log -p |
显示每个提交的具体代码修改(diff 内容) | 查看提交的详细改动 |
git log --stat |
显示每个提交修改的文件列表 + 增删行数 | 快速看提交影响的文件 |
| 五、时间筛选 | ||
git log --since="3 days ago" |
显示近 3 天的提交(支持小时/周) | 按时间范围找提交 |
git log --until="2025-12-01" |
显示指定日期之前的提交 | 按具体日期筛选 |
git log --since="yesterday" --until="today" |
显示昨天的提交 | 精准定位某天的修改 |
| 六、作者/提交信息筛选 | ||
git log --author="<作者名/邮箱>"(例: git log --author="luoyuxin") |
仅显示指定作者的提交 | 找某个人的所有提交 |
git log --grep="<关键词>" |
搜索提交信息中包含该关键词的提交 | 按提交备注找相关修改 |
| 七、特殊场景(合并/回滚) | ||
git log --merges |
仅显示所有合并提交(有 Merge: 行的提交) | 查看所有分支合并记录 |
git log --no-merges |
排除所有合并提交,只看普通提交 | 只看业务修改,忽略合并操作 |
git log -g |
显示 Git 的“引用日志”(含已删除的提交/分支) | 恢复误删的提交/分支 |