Git工作流用法

Git Local Workflow

1. 这篇文章解决什么问题?

这篇文章只讲 Git 在本地的日常提交流程。

日常开发中,最常见的流程是:

text 复制代码
修改代码
  ↓
查看修改状态
  ↓
查看具体改了什么
  ↓
添加到暂存区
  ↓
提交到本地仓库
  ↓
必要时再推送到远程

对应的 Git 命令是:

bash 复制代码
git status
git diff
git add .
git commit -m "message"
git push

其中前四步是这篇的重点。

如果是第一次绑定远程、第一次推送、或者 git push -u origin main 这类远程问题,统一看 02-github-ssh-remote.md


2. 查看当前仓库状态

最常用命令:

bash 复制代码
git status

它可以告诉我们:

text 复制代码
1. 当前在哪个分支
2. 哪些文件被修改了
3. 哪些文件还没有被 Git 跟踪
4. 哪些文件已经加入暂存区
5. 当前分支是否领先或落后远程分支

例如:

text 复制代码
Untracked files:
  03-local-workflow.md

表示这个文件还没有被 Git 管理。

如果看到:

text 复制代码
Changes not staged for commit:
  modified: README.md

表示文件已经被修改,但还没有加入暂存区。

如果看到:

text 复制代码
Changes to be committed:
  modified: README.md

表示文件已经加入暂存区,下一次 commit 会提交这些内容。


3. 查看具体修改内容

查看工作区和上一次提交之间的区别:

bash 复制代码
git diff

这个命令可以看到自己当前到底改了哪些内容。

例如修改了 README.md,执行:

bash 复制代码
git diff README.md

可以只查看这个文件的修改。

如果文件已经 git add 到暂存区,想看暂存区里的修改,可以使用:

bash 复制代码
git diff --cached

也可以写成:

bash 复制代码
git diff --staged

常用习惯:

bash 复制代码
git status
git diff

先看有哪些文件改了,再看具体改了什么。


4. 添加文件到暂存区

添加单个文件:

bash 复制代码
git add README.md

添加某个目录:

bash 复制代码
git add 09-engineering-tools/git/

添加当前目录下所有修改:

bash 复制代码
git add .

暂存区可以理解为:

text 复制代码
下一次 commit 准备提交的内容

所以 git add 并不是最终提交,只是先把修改放进暂存区。

更推荐的习惯是:

bash 复制代码
git status
git add README.md
git commit -m "message"

也就是说,优先按文件或目录选择性暂存,而不是无脑把所有改动一起塞进去。


5. 提交到本地仓库

执行:

bash 复制代码
git commit -m "message"

例如:

bash 复制代码
git commit -m "docs(git): add local workflow note"

执行 commit 后,Git 会在本地生成一个新的提交记录。

需要注意:

text 复制代码
commit 只是提交到本地仓库,还没有同步到 GitHub。

如果想同步到远程,还需要执行:

bash 复制代码
git push

6. 查看提交历史

查看完整提交历史:

bash 复制代码
git log

查看简洁提交历史:

bash 复制代码
git log --oneline

例如:

text 复制代码
a8c912e docs(git): add local workflow note
164b0cf init

如果想看图形化分支历史,可以使用:

bash 复制代码
git log --oneline --graph --decorate --all

这个命令可以更清楚地看到分支和提交关系。


7. 推送到远程仓库

提交到本地后,执行:

bash 复制代码
git push

如果这里报错,不要在这篇里硬记各种远程参数,直接回到 02 看:

text 复制代码
remote 绑定
push -u
origin/main
fetch / pull / push

8. 日常开发标准流程

在个人项目中,最常用的一套流程是:

bash 复制代码
# 1. 查看当前状态
git status

# 2. 查看具体修改
git diff

# 3. 添加修改到暂存区
git add path/to/file

# 4. 提交到本地仓库
git commit -m "message"

# 5. 推送到 GitHub
git push

可以简化理解为:

text 复制代码
status → diff → add → commit → push

9. 为什么不要一上来就 git add .?

git add . 很方便,但也最容易把不该提交的内容一起带进去。

例如:

text 复制代码
build/
*.o
*.log
.vscode/

这些一般不应该提交到 GitHub。

所以更稳妥的顺序是:

bash 复制代码
git status
git diff
git add path/to/file

如果某些文件不想被 Git 管理,应该写入 .gitignore


10. 只提交部分文件

有时候一次修改了很多文件,但只想提交其中一部分。

例如只提交 Git 笔记:

bash 复制代码
git add 09-engineering-tools/git/03-local-workflow.md
git commit -m "docs(git): add local workflow note"

如果只想提交 README:

bash 复制代码
git add README.md
git commit -m "docs: update README"

这样可以让每次 commit 更清晰。

如果一次改了代码、文档、测试三类内容,尽量拆成多个 commit,而不是一次性全提交。


11. 一次 commit 应该包含什么?

一个好的 commit 应该尽量只做一件事。

不推荐:

text 复制代码
一个 commit 里同时修改 README、实现 RESP parser、修复 dict bug、添加测试

推荐:

text 复制代码
一个 commit 只做一类修改

例如:

bash 复制代码
git commit -m "feat(resp): implement array parser"
git commit -m "fix(dict): handle lookup during rehash"
git commit -m "docs(ttl): add expire design note"
git commit -m "test(resp): add incomplete packet cases"

这样以后查看历史、回退代码、定位问题都会更清楚。


12. commit message 只先记一个轻量规则

推荐格式:

text 复制代码
type(scope): description

例如:

bash 复制代码
git commit -m "docs(git): add local workflow note"
git commit -m "feat(resp): implement parser"
git commit -m "fix(dict): fix rehash lookup"
git commit -m "test(aof): add recovery cases"

常见 type:

text 复制代码
feat      新功能
fix       修复 bug
docs      文档
test      测试
refactor  重构
perf      性能优化
build     构建相关
chore     杂项

这一篇只先记到够日常使用的程度。

更详细的 commit message 规范,后面可以单独整理到:

text 复制代码
09-commit-message.md

13. 本地开发示例流程

假设现在要写 RESP parser 文档。

可以这样操作:

bash 复制代码
# 查看当前状态
git status

# 新建或修改文档
vim 03-tinyredis/docs/resp-parser.md

# 查看修改
git diff

# 添加文件
git add 03-tinyredis/docs/resp-parser.md

# 提交
git commit -m "docs(resp): add parser design note"

# 推送
git push

如果是实现功能:

bash 复制代码
git status
git diff

git add src/resp/
git commit -m "feat(resp): implement incremental parser"

git push

如果是补测试:

bash 复制代码
git add tests/resp/
git commit -m "test(resp): add incomplete packet cases"
git push

14. 常用命令总结

bash 复制代码
# 查看状态
git status

# 查看工作区修改
git diff

# 查看暂存区修改
git diff --cached

# 添加单个文件
git add README.md

# 添加当前目录所有修改
git add .

# 提交
git commit -m "message"

# 查看历史
git log
git log --oneline

# 推送
git push

15. 我的日常使用习惯

个人项目中,推荐每次提交前都按下面顺序检查:

bash 复制代码
git status
git diff
git add path/to/file
git status
git commit -m "message"
git push

其中第二次 git status 是为了确认:

text 复制代码
1. 哪些文件已经进入暂存区
2. 有没有不该提交的文件
3. commit 是否只包含当前这次想提交的内容

16. 总结

Git 本地开发流程可以记成:

text 复制代码
看状态 → 看修改 → 加入暂存区 → 本地提交 → 推送远程

对应命令是:

bash 复制代码
git status
git diff
git add path/to/file
git commit -m "message"
git push
相关推荐
___波子 Pro Max.13 小时前
Git Remote 仓库地址变更
git
ModestCoder_18 小时前
Git 忽略所有 `.xlsx`,但保留指定 Excel 文件的方法
git·excel
阡陌..19 小时前
202605新版git_2.54.0常用操作指令
大数据·git·elasticsearch
会笑的小熊20 小时前
VScode项目推送到git仓库
ide·git·vscode
zhangfeng113320 小时前
宝塔服务器完全可以安装 Git,进行版本管理,而且非常简单
运维·服务器·人工智能·git·编程
Bdygsl21 小时前
Git(1)—— 基本理解与使用
git
JiaWen技术圈1 天前
增量静态再生(ISR)详解:Next.js 中的实现与应用
javascript·git·ubuntu
The Chosen One9851 天前
【Linux】深入理解Linux进程(二):进程的状态
linux·运维·服务器·开发语言·git
TimberWill1 天前
git worktree实现分支管理
git