Git 提交修改的核心步骤可以概括为:修改文件 -> 暂存变更 -> 提交变更

下图直观地展示了这一核心工作流,以及相关的重要命令:

flowchart TD A[工作目录<br>修改文件] -->|git add <file>| B{暂存区<br>Stage Changes}; B -->|git commit -m “message”| C[本地仓库<br>Commit History]; C -->|git push| D[远程仓库<br>e.g., GitHub]; D -->|git pull/fetch| A B -->|git restore --staged <file>| A C -->|git reset --soft HEAD~1| B

下面通过结合图示,对每个步骤进行详细说明。

第一步:检查当前状态(可选,但推荐)

在开始之前,先查看哪些文件被修改了,哪些文件已经暂存了,这可以清楚地了解当前工作区的状态。

git status

第二步:将修改添加到暂存区(Stage Changes)

这是将工作目录的更改“预约”一次提交的关键步骤。

  1. 添加特定文件:

    git add <文件名>
    # 示例
    git add index.html
    git add src/main.js
  2. 添加当前目录下所有更改(新建、修改、删除的文件):

    git add .
    # 或者
    git add -A
  3. 交互式地选择要添加的更改(非常实用,可以精确控制提交内容):

    git add -p

    这个命令会展示每一处更改,并询问你是否要将其加入暂存区。

提示: 执行 git add 后,再次使用 git status,会看到文件从未跟踪/已修改状态变成了 Changes to be committed(绿色),这表示它们已进入暂存区。

第三步:提交更改(Commit Changes)

将暂存区的内容正式保存到本地仓库的历史记录中。

  1. 最简单的提交(附带提交信息):

    git commit -m "这里填写提交说明"
    # 示例
    git commit -m "修复了用户登录的逻辑bug"
  2. 编写详细的提交信息(推荐用于重要更改):
    如果不使用 -m 参数,Git 会打开默认的文本编辑器(如 Vim、Nano),让你编写多行的、更详细的提交信息。

    git commit

    编辑器中通常建议的格式:

    第一行:简短的摘要(不超过50字符)
    
    第二行:空行
    
    第三行及以后:详细的描述,说明为什么进行这次更改,做了什么,以及可能的影响。

第四步:推送到远程仓库(Push to Remote)

如果更改需要与团队共享或备份,需要将本地提交推送到远程仓库(如 GitHub、GitLab)。

git push origin <分支名>
# 示例:推送到远程的 main 分支
git push origin main
# 如果当前分支已经与远程分支关联,可以简写为
git push

其他重要场景和命令

1. 跳过暂存区直接提交

如果确认所有已修改的文件都是这次提交的一部分,可以跳过 git add 步骤。

git commit -a -m "提交所有已修改的文件"
# 或者简写为
git commit -am "提交所有已修改的文件"

注意: 这个命令只对已经被 Git 跟踪的文件的修改有效,不会包含新创建但还未被 git add 过的文件。

2. 修改最后一次提交

如果最后一次提交有疏漏(比如少了个文件,或者提交信息写错了),可以使用 --amend 选项来修补。

# 先添加漏掉的文件
git add forgotten-file.js
# 然后修正提交
git commit --amend -m "新的提交信息"

警告: 如果已经将错误的提交 git push 到了远程,修正后需要使用 git push --force-with-lease(谨慎使用!)来覆盖远程历史。最好避免对已共享的提交进行修正。

3. 查看提交历史

git log
git log --oneline # 简洁的一行显示
git log --graph # 图形化显示分支合并历史

总结一下最常用的流程:

# 1. 日常修改代码后...
git status # 看看改了啥
git add . # 把所有改动都暂存起来
git commit -m "完成用户头像上传功能" # 提交到本地历史

# 2. 下班前或者功能完成时...
git push origin main # 推送到远程仓库,与团队同步

核心工作流:工作区 -> git add -> 暂存区 -> git commit -> 本地仓库 -> git push -> 远程仓库