Git的三种状态(已修改、已暂存、已提交)
Git的三种状态(已修改、已暂存、已提交)
Git管理文件时,文件会处于三种基本状态之一:已修改(modified)、已暂存(staged)和已提交(committed)。理解这三种状态及其转换关系是掌握Git工作流程的核心。
已修改状态
已修改状态表示文件在工作目录中被修改但尚未被Git跟踪。此时修改仅存在于本地工作副本,Git尚未将其纳入版本控制范围。
// 示例:修改前端项目中的组件文件
// src/components/Button.js
import React from 'react';
- function Button({ text }) {
+ function Button({ text, onClick }) {
return (
- <button>{text}</button>
+ <button onClick={onClick}>{text}</button>
);
}
典型场景包括:
- 编辑源代码文件内容
- 重命名或移动文件
- 删除文件
查看修改状态命令:
git status
# 输出示例:
# Changes not staged for commit:
# modified: src/components/Button.js
已暂存状态
已暂存状态表示修改已被标记为准备提交的状态。使用git add
命令将修改从工作目录移动到暂存区(staging area)。
# 暂存单个文件
git add src/components/Button.js
# 暂存所有修改
git add .
暂存区的作用:
- 选择性提交:可以只暂存部分修改
- 分批次提交:将大改动分解为多个逻辑提交
- 预览提交:通过
git diff --cached
查看即将提交的内容
// 暂存后继续修改会产生新的未暂存修改
// src/components/Button.js
function Button({ text, onClick }) {
return (
<button
onClick={onClick}
+ className="primary-btn"
>
{text}
</button>
);
}
此时状态检查:
git status
# 输出示例:
# Changes to be committed:
# modified: src/components/Button.js
#
# Changes not staged for commit:
# modified: src/components/Button.js
已提交状态
已提交状态表示修改已安全保存在本地Git数据库中。使用git commit
命令将暂存区内容转换为Git对象永久存储。
git commit -m "Add onClick prop to Button component"
提交后的特点:
- 生成唯一的SHA-1哈希标识(如
a1b2c3d
) - 创建新的提交对象包含作者、时间戳和提交信息
- 移动当前分支指针到新提交
查看提交历史:
git log --oneline
# 输出示例:
# a1b2c3d (HEAD -> main) Add onClick prop to Button component
# e4f5g6h Initial project setup
状态转换实践
完整工作流程示例:
- 修改CSS文件:
/* src/styles.css */
- body { margin: 0; }
+ body { margin: 0; font-family: 'Arial'; }
- 检查状态:
git status
# Changes not staged for commit...
- 暂存修改:
git add src/styles.css
- 再次修改文件:
/* src/styles.css */
body {
margin: 0;
font-family: 'Arial';
+ background: #f5f5f5;
}
- 提交初始修改:
git commit -m "Update base font family"
- 处理剩余修改:
git add src/styles.css
git commit -m "Add page background color"
高级状态管理
部分暂存:
# 交互式暂存
git add -p src/components/Button.js
撤销修改:
# 撤销工作目录修改
git checkout -- src/components/Button.js
# 撤销暂存区修改(保留工作目录)
git reset HEAD src/components/Button.js
状态可视化工具:
gitk
git gui
状态与分支的关系
在不同分支间切换时,Git会根据提交状态自动处理文件状态:
# 创建新分支时基于当前提交状态
git checkout -b new-feature
# 切换分支可能导致工作目录文件变化
git checkout main
未提交的修改会随分支切换保留或产生冲突,已提交的修改则永久关联到特定提交对象。
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn
上一篇:Git的基本术语解释
下一篇:Git对象模型简介