04 工作区域和文件状态 Git基本操作
1. Git 的工作区域¶
Git 的本地数据管理分为三个主要工作区域(若包含远程仓库,则为四个)。这些区域共同协作完成版本控制:
- 工作区(Working Directory):
- 定义:工作区是本地计算机上存放项目文件的地方,即你直接编辑代码或文件的实际目录。
- 作用:包含正在编辑的文件,文件状态为未跟踪(untracked) 或 已修改(modified)。
-
示例:项目文件夹
my-project/中的文件(如index.html、main.py)。 -
暂存区(Staging Area 或 Index):
- 定义:暂存区是一个中间区域,存储准备提交到本地仓库的更改,位于
.git/index文件中。 - 作用:缓存文件的修改,允许选择性地提交部分更改,文件状态为已暂存(staged)。
-
示例:通过
git add将修改的文件放入暂存区。 -
本地仓库(Local Repository):
- 定义:本地仓库存储项目的所有版本历史,位于
.git目录(如.git/objects)。 - 作用:保存已提交的版本快照,文件状态为已提交(committed)。
-
示例:通过
git commit将暂存区内容保存到本地仓库。 -
远程仓库(Remote Repository,可选):
- 定义:存储在远程服务器(如 GitHub、GitLab)的仓库。
- 作用:用于团队协作和代码备份,文件状态为已推送(pushed)。
- 示例:通过
git push将本地仓库内容上传到远程。
类比(参考): - 工作区:你的书桌,存放正在编辑的草稿。 - 暂存区:文件夹,存放准备整理的章节。 - 本地仓库:书架,存放完成的书稿。 - 远程仓库:云端图书馆,共享或备份书稿。
2. Git 的文件状态¶
Git 中的文件在不同工作区域具有不同状态,理解这些状态是掌握 Git 的核心。文件状态分为以下几种(基于):
- 未跟踪(Untracked):
- 文件刚创建,未被 Git 管理,位于工作区。
-
示例:新建
newfile.txt,未执行git add。 -
已修改(Modified):
- 文件已跟踪但被修改,尚未添加到暂存区,位于工作区。
-
示例:修改
index.html的内容。 -
已暂存(Staged):
- 文件修改已通过
git add添加到暂存区,准备提交。 -
示例:对
index.html执行git add index.html。 -
已提交(Committed):
- 文件通过
git commit保存到本地仓库,生成版本快照。 -
示例:执行
git commit -m "Update index.html"。 -
已推送(Pushed,可选):
- 文件通过
git push提交到远程仓库。 - 示例:执行
git push origin main。
3. 工作区域与文件状态的转换流程¶
文件状态在工作区域之间通过 Git 命令转换,以下是典型流程(结合):
顺序操作¶
- 初始状态:
- 工作区与仓库一致,文件状态为未修改(Origin)。
-
示例:刚克隆仓库(
git clone)后,运行git status显示: -
文件增删改,变为已修改(Modified)或未跟踪(Untracked):
- 在工作区创建或修改文件。
-
示例:新建
newfile.txt或修改index.html,运行git status: -
添加到暂存区,变为已暂存(Staged):
- 使用
git add将修改移到暂存区: -
运行
git status: -
提交到本地仓库,变为已提交(Committed):
- 使用
git commit保存更改: -
运行
git status: -
推送到远程仓库,变为已推送(Pushed):
- 使用
git push上传:
撤销操作¶
- 已修改但未暂存:
- 查看修改:
- 撤销修改(恢复到上次提交状态):
-
撤销未跟踪文件:
-
已暂存但未提交:
- 查看暂存区差异:
- 撤销暂存(移回工作区):
-
撤销暂存并清空修改(谨慎):
-
已提交但未推送:
- 回退到上一个版本:
-
回退到指定版本(需提交的哈希值):
-
已推送:
- 强制覆盖远程仓库(谨慎,需通知团队):
4. 常用命令¶
以下是管理工作区域和文件状态的核心命令(参考):
- git status:查看工作区和暂存区文件状态。
- git add <file>:将文件从工作区添加到暂存区。
- git commit -m "message":提交暂存区内容到本地仓库。
- git push:推送本地仓库到远程。
- git diff:查看工作区与暂存区的差异。
- git reset:撤销暂存或回退版本。
- git checkout -- <file>:撤销工作区修改。
- git clean -f:删除未跟踪文件。
5. 实际操作示例¶
以下是一个完整的工作流示例:
-
初始化仓库:
-
创建文件并修改:
-
添加到暂存区:
-
提交到本地仓库:
-
关联远程仓库并推送:
-
修改文件并撤销:
- 修改
index.html后:
6. 最佳实践¶
- 频繁检查状态:使用
git status确认文件状态。 - 小步提交:每次提交专注于单一功能,便于追踪。
- 清晰提交信息:描述具体更改内容,如 “Add login page UI”。
- 忽略无关文件:确保
.gitignore包含临时文件和敏感信息。 - 备份远程:定期推送至远程仓库,避免数据丢失。
7. 常见问题¶
- “Untracked files”提示:新文件需用
git add跟踪。 - “Changes not staged”提示:修改未添加到暂存区,需
git add。 - 暂存区看不到修改:使用
git diff --cached查看暂存区与本地仓库差异。 - 误删文件:若已提交,可用
git checkout <hash> -- <file>恢复。
git log 查看仓库提交历史记录
git log --oneline 查看简介的提交记录