2、Git基础操作:创建仓库、添加文件、提交更新、查看状态、查看历史
好,咱们正式开始动手了。这一章是Git的“肌肉记忆”训练——说白了,就是那几个你每天都会敲无数遍的命令。我刚开始带团队的时候,发现很多新人把Git想得太玄乎,其实核心操作就那么几个:建仓库、加文件、提交、看状态、翻历史。把这五个动作练熟了,你就能应付90%的日常场景。
2.1 创建仓库:从零开始,还是从现有项目开始?
创建仓库有两种方式,我分别说说。
方式一:从零开始
你想写一个新项目,比如一个Python脚本。在空目录里执行:
mkdir my-project
cd my-project
git init
执行完 git init,Git会在当前目录下生成一个隐藏的 .git 文件夹。这个文件夹就是Git的“数据库”,里面存着所有版本信息。嗯,这里要注意:千万不要手动修改 .git 里面的内容,否则仓库可能直接坏掉。我曾经有个同事手贱删了 .git/objects 里的一个文件,结果整个历史全丢了……
方式二:从现有项目开始
如果别人已经建好了仓库,你想参与,就用 git clone:
git clone https://github.com/example/project.git
这会把远程仓库完整地复制到本地。我个人习惯是先 clone 再 cd 进去,省得自己建目录。
git init 后,可以用 ls -a 看看有没有 .git 文件夹。如果看不到,说明没成功。
2.2 添加文件:把文件交给Git“盯住”
仓库建好了,但Git并不会自动跟踪所有文件。你得明确告诉它:“这个文件我要管”。
先创建一个文件:
echo "# My Project" > README.md
然后把它加入暂存区:
git add README.md
如果你想一次添加所有文件(包括新文件和修改过的文件),可以用:
git add .
但说实话,我建议你不要无脑 git add .。为什么呢?因为有时候你会不小心把编译产物、配置文件密码什么的也加进去。我在项目中就遇到过有人把 .env 文件提交了,结果数据库密码直接暴露在Git历史里……那叫一个尴尬。
更好的做法是:先用 git status 看看哪些文件变了,再一个个 git add,或者用 git add -p 交互式地选择要添加的内容。
git add 包含密码、密钥、Token 的文件。建议提前写好 .gitignore 文件,把这些文件排除在外。
2.3 提交更新:给版本打个“快照”
文件加到暂存区后,就可以提交了:
git commit -m "初始化项目,添加README"
-m 后面跟的是提交信息。这玩意儿很重要——你想想看,几个月后你翻历史,如果看到一堆“update”、“fix”、“commit”这种信息,你肯定想骂人。我个人的习惯是:提交信息要写清楚“为什么改”,而不是“改了啥”。
比如:
- ❌
fix bug - ✅
修复用户登录时密码校验失败的bug,原因是空指针异常
如果你忘了写 -m,Git会打开一个文本编辑器让你写信息。默认是Vim,不会用的话会很痛苦……所以还是老老实实加 -m 吧。
git commit 都会生成一个唯一的40位哈希值(比如 a1b2c3d4...),这就是版本的“身份证”。你可以通过这个哈希值随时回到这个版本。
2.4 查看状态:随时知道自己在哪
这是我最常用的命令,没有之一:
git status
它会告诉你三件事:
- 当前在哪个分支(比如
main) - 哪些文件被修改了但还没
add(红色显示) - 哪些文件已经
add了但还没commit(绿色显示)
我建议你每次 add 之前和 commit 之前,都跑一遍 git status。这就像开车前看后视镜——花不了几秒钟,但能避免很多事故。
举个例子,你可能会看到这样的输出:
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
newfile.txt
看到 modified 表示文件被改了但没 add;Untracked 表示Git完全不认识这个文件。嗯,这时候你就知道该做什么了。
2.5 查看历史:翻旧账的艺术
提交了几次之后,你想看看都干了啥:
git log
默认输出是这样的:
commit a1b2c3d4e5f6...
Author: Your Name <you@example.com>
Date: Mon Jan 1 12:00:00 2025 +0800
修复用户登录时密码校验失败的bug
commit f6e5d4c3b2a1...
Author: Your Name <you@example.com>
Date: Sun Dec 31 10:00:00 2024 +0800
初始化项目,添加README
如果你觉得信息太多,可以用 --oneline 参数,只显示一行:
git log --oneline
输出:
a1b2c3d 修复用户登录时密码校验失败的bug
f6e5d4c 初始化项目,添加README
这样清爽多了。我个人习惯是 git log --oneline --graph,还能看到分支合并的图形化结构,非常直观。
q 退出。或者用 git log -5 只看最近5条。
2.6 核心流程总结
把上面几个命令串起来,就是Git最核心的工作流:
# 1. 创建或克隆仓库
git init
# 或者 git clone <url>
# 2. 修改文件(用编辑器改)
# 3. 查看状态
git status
# 4. 添加文件到暂存区
git add <file>
# 5. 提交
git commit -m "写清楚改了啥"
# 6. 查看历史
git log --oneline
这个循环你每天会重复几十次。说白了,Git就是帮你管理这些“快照”的工具。你只需要记住:修改 → add → commit,三步走。
下面这张图展示了整个流程:
看到没?整个流程就是文件从左往右流动。你每次 git add 就是把文件从工作区搬到暂存区,每次 git commit 就是把暂存区的内容打包成一个版本存到仓库里。
好了,这一章的内容就这些。把上面的命令敲几遍,形成肌肉记忆。下一章我们会聊分支操作——那才是Git真正强大的地方。