# 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 推送本地修改)
## 掌握「本地仓库」核心指令(80% 场景够用) > 先练本地操作,无需联网,重点是 “工作区→暂存区→本地仓库” 的流转: ### 1. 初始化 / 配置(首次使用)
指令 作用 实操场景
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 配置 验证配置是否正确
### 2. 查看状态 / 差异(高频)
指令 作用 关键说明
git status 查看工作区 / 暂存区状态(哪些文件修改、未跟踪、已暂存) 每次操作前先执行,明确当前状态
git diff 查看工作区和暂存区的文件差异(未暂存的修改) 看具体改了哪些内容
git diff --cached 查看暂存区和本地仓库的差异(已暂存待提交的修改) 确认暂存的内容是否正确
### 3. 暂存 / 提交(核心)
指令 作用 实操示例
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
### 4. 版本回滚(纠错必备)
指令 作用 适用场景
git checkout -- 文件名 撤销工作区的修改(恢复到暂存区 / 本地仓库的版本) 改乱文件想还原
git reset HEAD 文件名 将暂存区的文件撤回工作区(取消暂存) 误加暂存,想取消
git reset --hard 提交ID 回滚本地仓库到指定版本(工作区 / 暂存区也同步回滚) 提交错误,彻底回滚
git log 查看提交记录(版本号、作者、时间、说明) 找要回滚的提交 ID(复制前 7 位)
git log --oneline 简化提交记录(一行显示,仅版本号前 7 位 + 说明) 快速查看提交历史
## 掌握「远程仓库」指令(协作必备) > 本地操作熟练后,学习和远程仓库的同步,核心是「克隆→拉取→推送→解决冲突」: ### 1. 远程仓库关联 / 查看
指令 作用 实操示例
git clone 远程仓库地址 克隆远程仓库到本地(含所有分支和提交记录) git clone https://github.com/xxx/todo.git
git remote add origin 远程仓库地址 将本地仓库关联到远程仓库(命名为 origin) 本地初始化后关联远程
git remote -v 查看已关联的远程仓库地址(fetch/push 地址) 验证远程仓库是否正确
git remote remove origin 移除已关联的远程仓库 关联错误时修改
### 2. 拉取 / 推送(同步核心)
指令 作用 注意事项
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) 首次推送新分支时用
### 3. 分支操作(多人协作核心)
指令 作用 实操场景
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 是一个组合操作指令,核心是「更新本地的远程分支引用 + 清理无效引用」 远程分支和本地分支信息不一致的时候使用
## 掌握「进阶指令」(解决复杂场景) ### 1. 解决合并冲突 - 冲突是协作中必然遇到的,核心步骤: - 拉取远程代码:git pull → 提示冲突(CONFLICT); - 查看冲突文件:git status 会标记 both modified; - 打开冲突文件,找到 <<<<<<< HEAD(本地代码)、=======(远程代码)、>>>>>>> 分支名 标记,手动修改保留正确代码; - 解决后暂存:git add 冲突文件名; - 提交:git commit -m "解决合并冲突:修复checkbox状态问题"。 ### 2. 暂存工作区(临时切换分支)
指令 作用 适用场景
git stash 将未提交的修改暂存到 “暂存栈”(工作区回到干净状态) 开发中临时切换分支,不想提交
git stash list 查看暂存栈中的所有记录 确认暂存的内容
git stash apply 恢复最近一次暂存的修改(暂存栈仍保留) 回到之前的开发状态
git stash pop 恢复最近一次暂存的修改并删除暂存栈记录 常用,恢复后清空暂存
git stash drop 删除指定暂存记录 不需要的暂存内容
### 3. 标签(版本发布)
指令 作用 实操示例
git tag v1.0.0 给当前提交打标签(标记版本发布) 发布 TodoList v1.0 时用
git tag 查看所有标签 确认已打标签
git push origin v1.0.0 推送标签到远程仓库 同步版本标记-
## git log 使用
指令 核心作用 适用场景
一、基础查看
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 的“引用日志”(含已删除的提交/分支) 恢复误删的提交/分支