git stash 和git add还有git commit的区别 工作区,暂存区,储藏区和本地版本库
在 Git 中,工作区、暂存区、储藏区和本地版本库是四个核心概念,它们共同构成了 Git 管理代码变更的流程,理解这些区域的作用和关系是掌握 Git 的关键。在 Git 中,工作区、暂存区、储藏区和本地版本库是四个核心概念,它们共同构成了 Git 管理代码变更的流程,理解这些区域的作用和关系是掌握 Git 的关键。是 “先把没完成的工作藏起来,稍后再继续”。是 “选中要提交的内容”,是 “确认提交
·
git stash、git add 和 git commit 是 Git 中三个不同用途的命令,分别用于处理工作区、暂存区和版本库的代码状态,核心区别如下:
1. git add:将工作区修改添加到暂存区
- 作用:把工作区中修改的文件(新增、修改、删除)添加到 暂存区(Stage),让 Git 跟踪这些变更,为后续提交做准备。
- 场景:当你完成一部分修改,想将这些变更标记为 “待提交” 状态时使用。
- 示例:
git add filename.txt # 添加单个文件 git add . # 添加当前目录所有变更(新增、修改,不包括删除) git add -A # 添加所有变更(包括删除的文件) - 特点:
- 暂存区是工作区和版本库之间的 “过渡区”,可以分批添加不同文件的变更。
- 执行后,
git status会显示这些文件处于 “已暂存” 状态(绿色)。
2. git commit:将暂存区变更提交到版本库
- 作用:把暂存区中的所有变更(即
git add后的内容)提交到 本地版本库(Repository),生成一个新的版本快照,并附带提交信息。 - 场景:当你完成一个完整功能或修复,确认暂存区的变更无误后,将其 “固化” 为一个版本。
- 示例:
git commit -m "feat: 新增登录功能" # 提交并添加说明信息 - 特点:
- 每个提交会生成一个唯一的哈希值(如
a1b2c3d),用于标识这个版本,方便后续回溯。 - 提交后,暂存区的变更会被清空,工作区若没有新修改,
git status会显示 “工作区干净”。
- 每个提交会生成一个唯一的哈希值(如
3. git stash:暂存工作区未提交的变更(临时保存)
- 作用:将工作区中 未提交的变更(包括已
add到暂存区和未add的修改) 临时 “储藏” 起来,让工作区回到干净状态(与最近一次提交一致),方便切换分支或处理其他任务。 - 场景:
- 正在当前分支开发,突然需要切换到其他分支修复紧急 bug,但当前修改还没完成,不想提交(避免产生无效版本)。
- 想拉取远程最新代码,但本地有未提交的修改,可能冲突时,先暂存再拉取。
- 示例:
git stash # 暂存当前所有未提交变更 git stash save "备注信息" # 暂存时添加备注(方便后续区分) git stash pop # 恢复最近一次暂存的变更,并删除暂存记录 git stash apply # 恢复最近一次暂存的变更,保留暂存记录 git stash list # 查看所有暂存记录 - 特点:
- 暂存的内容保存在 Git 的 “储藏区”,不属于任何分支,切换分支后仍可恢复。
- 暂存后,工作区和暂存区都会回到最近一次提交的状态(
git status显示干净)。
三者核心区别总结
| 命令 | 操作对象 | 目的 | 典型场景 |
|---|---|---|---|
git add |
工作区 → 暂存区 | 标记待提交的变更 | 准备提交前,分批选择要提交的文件 |
git commit |
暂存区 → 本地版本库 | 生成版本快照,固化变更 | 完成功能 / 修复后,提交一个有意义的版本 |
git stash |
工作区 + 暂存区 → 储藏区 | 临时保存未完成的变更,清空工作区 | 需切换分支或处理其他任务,暂不想提交变更 |
简单说:add 是 “选中要提交的内容”,commit 是 “确认提交到版本库”,stash 是 “先把没完成的工作藏起来,稍后再继续”。
在 Git 中,工作区、暂存区、储藏区和本地版本库是四个核心概念,它们共同构成了 Git 管理代码变更的流程,理解这些区域的作用和关系是掌握 Git 的关键。
1. 工作区(Working Directory)
- 定义:你当前正在编辑代码的目录(即项目文件夹),是你能直观看到和修改文件的地方。
- 作用:存放项目的实际文件,所有新增、修改、删除的操作都先在这里发生。
- 特点:
- 工作区的文件状态分为两种:
- 未跟踪(Untracked):新创建的文件,Git 尚未记录其存在(
git status中显示红色)。 - 已跟踪(Tracked):Git 已记录的文件(曾被
git add或git commit处理过),包括 “未修改”“已修改”“已暂存” 三种细分状态。
- 未跟踪(Untracked):新创建的文件,Git 尚未记录其存在(
- 工作区的修改不会自动被 Git 记录,需要手动通过命令(如
git add)让 Git 关注。
- 工作区的文件状态分为两种:
2. 暂存区(Staging Area / Index)
- 定义:位于
.git目录内的一个临时区域(可理解为 “待提交缓冲区”),用于存放 “准备提交到版本库” 的变更。 - 作用:筛选和暂存工作区中需要提交的内容,让你可以分批、有选择地提交修改(而非一次性提交所有变更)。
- 特点:
- 通过
git add <文件>将工作区的修改添加到暂存区(git status中显示绿色 “已暂存”)。 - 暂存区的内容是 “预提交版本”,可以再次修改工作区文件后,用
git add更新暂存区(覆盖之前的暂存内容)。 - 只有暂存区的内容会被
git commit提交到本地版本库。
- 通过
3. 储藏区(Stash Area)
- 定义:Git 用于临时保存 “未完成变更” 的区域,存放的是工作区和暂存区中未提交的修改(可理解为 “草稿箱”)。
- 作用:当你需要暂时搁置当前未完成的工作(如切换分支处理紧急任务),但又不想提交一个不完整的版本时,可将变更暂存到储藏区,让工作区回到干净状态。
- 特点:
- 通过
git stash命令将当前工作区和暂存区的未提交变更(包括已add和未add的内容)存入储藏区。 - 储藏区的内容独立于分支,切换分支后仍可通过
git stash pop或git stash apply恢复到任意分支。 - 可通过
git stash list查看所有储藏记录,每条记录有唯一标识(如stash@{0}),方便管理多个暂存内容。
- 通过
4. 本地版本库(Local Repository)
- 定义:位于项目根目录下的
.git隐藏文件夹,是 Git 真正存储代码历史版本的核心区域,包含所有分支、提交记录、标签等元数据。 - 作用:永久保存代码的完整历史快照,每个提交(
commit)都是一个不可修改的版本,可随时回溯到任意历史状态。 - 特点:
- 通过
git commit命令将暂存区的内容提交到本地版本库,生成一个新的版本(包含唯一哈希值、提交信息、作者等)。 - 本地版本库的内容仅存在于本地电脑,如需同步到团队共享服务器,需通过
git push推送到远程版本库(如 GitHub、GitLab)。 - 支持分支管理,不同分支的版本历史独立存储,可通过
git checkout切换分支查看不同版本的代码。
- 通过
四者关系与工作流程
- 修改代码:在 工作区 编辑文件(新增、修改、删除)。
- 暂存变更:用
git add将工作区中需要提交的修改放到 暂存区。 - 提交版本:用
git commit将暂存区的内容提交到 本地版本库,生成历史记录。 - 临时搁置:若修改未完成需中断,用
git stash将工作区 + 暂存区的变更存到 储藏区,后续用git stash pop恢复继续工作。
简单来说:
- 工作区是 “草稿纸”,暂存区是 “待提交清单”,本地版本库是 “档案柜”,储藏区是 “临时抽屉”。
- 代码变更的流向通常是:工作区 → 暂存区 → 本地版本库,而储藏区是临时偏离这个流程时的 “中转站”。
在 Git 中,工作区、暂存区、储藏区和本地版本库是四个核心概念,它们共同构成了 Git 管理代码变更的流程,理解这些区域的作用和关系是掌握 Git 的关键。
1. 工作区(Working Directory)
- 定义:你当前正在编辑代码的目录(即项目文件夹),是你能直观看到和修改文件的地方。
- 作用:存放项目的实际文件,所有新增、修改、删除的操作都先在这里发生。
- 特点:
- 工作区的文件状态分为两种:
- 未跟踪(Untracked):新创建的文件,Git 尚未记录其存在(
git status中显示红色)。 - 已跟踪(Tracked):Git 已记录的文件(曾被
git add或git commit处理过),包括 “未修改”“已修改”“已暂存” 三种细分状态。
- 未跟踪(Untracked):新创建的文件,Git 尚未记录其存在(
- 工作区的修改不会自动被 Git 记录,需要手动通过命令(如
git add)让 Git 关注。
- 工作区的文件状态分为两种:
2. 暂存区(Staging Area / Index)
- 定义:位于
.git目录内的一个临时区域(可理解为 “待提交缓冲区”),用于存放 “准备提交到版本库” 的变更。 - 作用:筛选和暂存工作区中需要提交的内容,让你可以分批、有选择地提交修改(而非一次性提交所有变更)。
- 特点:
- 通过
git add <文件>将工作区的修改添加到暂存区(git status中显示绿色 “已暂存”)。 - 暂存区的内容是 “预提交版本”,可以再次修改工作区文件后,用
git add更新暂存区(覆盖之前的暂存内容)。 - 只有暂存区的内容会被
git commit提交到本地版本库。
- 通过
3. 储藏区(Stash Area)
- 定义:Git 用于临时保存 “未完成变更” 的区域,存放的是工作区和暂存区中未提交的修改(可理解为 “草稿箱”)。
- 作用:当你需要暂时搁置当前未完成的工作(如切换分支处理紧急任务),但又不想提交一个不完整的版本时,可将变更暂存到储藏区,让工作区回到干净状态。
- 特点:
- 通过
git stash命令将当前工作区和暂存区的未提交变更(包括已add和未add的内容)存入储藏区。 - 储藏区的内容独立于分支,切换分支后仍可通过
git stash pop或git stash apply恢复到任意分支。 - 可通过
git stash list查看所有储藏记录,每条记录有唯一标识(如stash@{0}),方便管理多个暂存内容。
- 通过
4. 本地版本库(Local Repository)
- 定义:位于项目根目录下的
.git隐藏文件夹,是 Git 真正存储代码历史版本的核心区域,包含所有分支、提交记录、标签等元数据。 - 作用:永久保存代码的完整历史快照,每个提交(
commit)都是一个不可修改的版本,可随时回溯到任意历史状态。 - 特点:
- 通过
git commit命令将暂存区的内容提交到本地版本库,生成一个新的版本(包含唯一哈希值、提交信息、作者等)。 - 本地版本库的内容仅存在于本地电脑,如需同步到团队共享服务器,需通过
git push推送到远程版本库(如 GitHub、GitLab)。 - 支持分支管理,不同分支的版本历史独立存储,可通过
git checkout切换分支查看不同版本的代码。
- 通过
四者关系与工作流程
- 修改代码:在 工作区 编辑文件(新增、修改、删除)。
- 暂存变更:用
git add将工作区中需要提交的修改放到 暂存区。 - 提交版本:用
git commit将暂存区的内容提交到 本地版本库,生成历史记录。 - 临时搁置:若修改未完成需中断,用
git stash将工作区 + 暂存区的变更存到 储藏区,后续用git stash pop恢复继续工作。
简单来说:
- 工作区是 “草稿纸”,暂存区是 “待提交清单”,本地版本库是 “档案柜”,储藏区是 “临时抽屉”。
- 代码变更的流向通常是:工作区 → 暂存区 → 本地版本库,而储藏区是临时偏离这个流程时的 “中转站”。
更多推荐
所有评论(0)