菜鸟科技网

Linux commit命令有何作用与使用场景?

git commit 是什么?

git commit 命令用于将你暂存区 中的更改(通过 git add 添加的文件)永久保存到你的本地仓库中,每一次 commit 都会创建一个新的“快照”,记录了项目在那一刻的状态。

你可以把它想象成给项目拍了一张照片,并在这张照片上写下了备注(提交信息),解释这张照片记录了什么内容。


基础用法

最简单的用法

git commit

执行这个命令后,如果你的 Git 配置中没有默认的文本编辑器,它会弹出一个让你填写提交信息的编辑器窗口(通常是 Vim 或 Nano),你需要在这里输入你的提交信息,保存并退出后,提交才会完成。

推荐的用法:使用 -m 选项

这是最常用、最高效的方式,可以直接在命令行中附带提交信息。

git commit -m "你的提交信息"

示例:

# 假设你已经用 git add index.html style.css 暂存了文件
$ git commit -m "添加首页样式和布局"
[master (root-commit) a1b2c3d] 添加首页样式和布局
 2 files changed, 45 insertions(+)
 create mode 100644 index.html
 create mode 100644 style.css

输出信息解读:

  • [master a1b2c3d]master 是分支名,a1b2c3d 是这次提交的唯一哈希 ID(也叫 Commit Hash)。
  • 2 files changed:有 2 个文件被修改。
  • 45 insertions(+):新增了 45 行代码。
  • create mode ...:创建了 2 个新文件。

git commit 的工作流程(三棵树理论)

理解 Git 的工作原理能帮助你更好地使用 commit,Git 通常被比喻为“三棵树”:

Linux commit命令有何作用与使用场景?-图1

  1. Working Directory (工作目录):你正在操作的文件,它们的状态可能是 Untracked (未跟踪), Modified (已修改), 或 Staged (已暂存)。
  2. Staging Area (暂存区):一个“中间人”区域,你可以把文件的修改从工作区“添加”到这里,告诉 Git:“嘿,这些是我下次要提交的修改”。
  3. .git Directory (Git 仓库):Git 的数据存放地,当你执行 git commit 时,Git 会将暂存区里的内容打包成一个“快照”,并保存到仓库中。

一个完整的提交流程是: 修改文件 -> git add <file> (将修改放入暂存区) -> git commit -m "信息" (将暂存区内容提交到仓库)


常用选项与参数

-m, --message

描述:指定提交信息,这是最常用的选项。

git commit -m "修复登录按钮的样式问题"

-a, --all

描述:自动将所有已跟踪已修改 的文件添加到暂存区,然后再进行提交。它不会包含未跟踪的文件

# 修改了几个已跟踪的文件,但没有用 git add 暂存它们
$ git status
# ...显示你修改了 file1.txt, file2.txt
# 使用 -a 选项,可以省略 git add 步骤
$ git commit -am "更新了几个已跟踪的文件"

--amend

描述修正 上一次的提交,这是一个非常强大的功能,有两种常见用法:

  1. 修改上一次提交的信息

    # 你刚刚提交,但发现信息写错了
    $ git commit -m "拼写错误的提交信息"
    # 修正提交信息
    $ git commit --amend -m "正确的提交信息"

    这会覆盖掉上一次的提交,而不是创建一个新的提交,提交的哈希值也会改变。

  2. 将暂存的文件合并到上一次提交中

    # 你提交了,但忘记添加一个文件
    $ git commit -m "添加了功能A"
    # 发现忘了添加 file_b.js
    $ git add file_b.js
    # 使用 --amend,将 file_b.js 的修改合并到上一次提交中
    $ git commit --amend --no-edit  # --no-edit 表示不修改提交信息

    这同样会覆盖上一次的提交。

-S, --gpg-sign

描述:使用 GPG 对你的提交进行签名,用于验证提交者的身份,这在开源项目或需要高安全性的环境中很常见。

git commit -S -m "一个需要签名的提交"

--allow-empty

描述:创建一个空的提交,即没有修改任何文件,这在某些自动化流程(如触发 CI/CD)或标记某个重要时间点时很有用。

git commit --allow-empty -m "项目里程碑:完成 v1.0 版本开发"

提交信息的最佳实践

写一个好的提交信息和写好代码同样重要,一个好的提交信息能让你的团队协作更顺畅,也让历史记录更容易理解。

推荐的格式 (Conventional Commits):

<类型>(<范围>): <描述>
[可选的脚注]

类型:

  • feat: 新功能
  • fix: 修复 Bug
  • docs: 仅文档更改(如 README, .md 文件)
  • style: 不影响代码含义的更改(格式、空格、分号等)
  • refactor: 既不是修复 Bug 也不是添加功能的代码更改
  • perf: 提高性能的代码更改
  • test: 添加或修改测试用例
  • chore: 构建过程或辅助工具的变动

范围:

  • 可选的,用于说明影响的范围,例如组件或模块名,在大型项目中常用。

描述:

  • 使用现在时态,"add feature" 而不是 "added feature"。
  • 简洁明了,不超过 50 个字符。
  • 如果需要,可以像写命令一样,以动词开头。 **
  • 提供更详细的修改说明。
  • 解释为什么要进行这次修改,而不仅仅是做了什么
  • 可以换行,每行不超过 72 个字符。

示例:

# 一个简单的修复
git commit -m "fix: 修复用户登录时密码为空导致的崩溃问题"
# 一个新功能
git commit -m "feat(user-profile): 添加头像上传功能"
# 一个有详细说明的提交
git commit -m "refactor(api): 重构用户认证模块
- 将旧的 cookie 认证方式替换为 JWT
- 提高了安全性和可扩展性
- 移除了不再需要的 `authenticate_user` 函数"

常见问题与解决

Q1: 提交信息写错了,怎么办?

  • 如果还没有推送到远程仓库
    • 只改信息git commit --amend -m "新信息"
    • 改信息并修改文件:修改文件 -> git add -> git commit --amend
  • 如果已经推送到远程仓库
    • 情况比较复杂,通常需要使用 git rebase -igit revert 来修正。尽量避免在已推送的提交上修改。

Q2: 我提交了,但发现还有文件没加,怎么办?

  • 使用 git commit --amend,先把漏掉的文件 git add 进来,然后执行 git commit --amend,它会将新文件合并到上一次提交中。

Q3: git commitgit push 有什么区别?

  • git commit:将更改保存到本地仓库
  • git push:将你本地的提交推送到远程仓库(如 GitHub, GitLab),让其他协作者也能看到。
  • 简单说:commit 是“存钱到自己的钱包”,push 是“转账到公共账户”。

命令 描述
git commit -m "信息" 最常用,创建一个带有指定信息的提交。
git commit -am "信息" 自动添加所有已修改的文件并提交(跳过 git add)。
git commit --amend 修正上一次的提交(修改信息或添加文件)。
git commit --allow-empty 创建一个空的提交。

掌握 git commit 是使用 Git 的第一步,也是最重要的一步,养成良好、一致的提交习惯,会让你的版本控制历史清晰、专业,极大地提升个人和团队的协作效率。

分享:
扫描分享到社交APP
上一篇
下一篇