阿里云主机折上折
  • 微信号
您当前的位置:网站首页 > Git的三种状态(已修改、已暂存、已提交)

Git的三种状态(已修改、已暂存、已提交)

作者:陈川 阅读数:17771人阅读 分类: 开发工具

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>
  );
}

典型场景包括:

  1. 编辑源代码文件内容
  2. 重命名或移动文件
  3. 删除文件

查看修改状态命令:

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

状态转换实践

完整工作流程示例:

  1. 修改CSS文件:
/* src/styles.css */
- body { margin: 0; }
+ body { margin: 0; font-family: 'Arial'; }
  1. 检查状态:
git status
# Changes not staged for commit...
  1. 暂存修改:
git add src/styles.css
  1. 再次修改文件:
/* src/styles.css */
body { 
  margin: 0; 
  font-family: 'Arial';
+ background: #f5f5f5;
}
  1. 提交初始修改:
git commit -m "Update base font family"
  1. 处理剩余修改:
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

前端川

前端川,陈川的代码茶馆🍵,专治各种不服的Bug退散符💻,日常贩卖秃头警告级的开发心得🛠️,附赠一行代码笑十年的摸鱼宝典🐟,偶尔掉落咖啡杯里泡开的像素级浪漫☕。‌