你可能遇到过这样的场景:改了一段代码,跑起来不对,想退回去,但上一个版本已经被覆盖了。或者和别人合作,两个人同时改了同一个文件,最后不知道该保留谁的。
Git就是为解决这类问题而生的。
一、git 是什么
git 是一个版本控制系统,它做的事情可以概括为一句话:追踪文件的变化历史。
每次你告诉 git “记住现在的状态”,它就把当前所有文件的快照保存下来。之后你可以随时回到任意一个历史快照,也可以看两个版本之间改了什么。
更重要的是,git 让多人协作变得可行,每个人在自己的副本上工作,git 负责把改动安全地合并在一起。
你的代码放在 GitHub 上,git 就是你和 GitHub 之间的"传输协议"。在本地用 git 管理版本,用git push 把代码同步到 GitHub 上。
二、三个核心概念
先搞清楚三个概念,后面的命令才有意义。
2.1 仓库(repository)
仓库就是 git 管理的一个项目目录。运行 git init 之后,当前目录就变成了一个仓库,git 会在里面创建一个隐藏的 .git 文件夹,所有的版本历史都存在那里。
你本地有一份仓库,GitHub 上有一份仓库,两者可以互相同步。
2.2 提交(commit)
commit 是版本历史里的一个节点,你手动告诉 git “把现在的状态记下来”,就生成了一个 commit。
- 每个 commit包含:
- 一个唯一的 ID(40 位哈希,通常用前 7 位表示,如 a3f9b12)
- 你写的提交说明(message)
- 当时所有文件的快照
commit 不是自动产生的,必须你主动触发。这和"自动保存"不同,git 不会帮你保存,它只记录你明确提交的状态。
2.3 分支(branch)
分支是一条独立的开发线。默认只有一条分支(通常叫 main 或 master),你可以随时创建新分支,在上面做实验,不影响主线。
一个直觉类比:main 是你的"稳定存档",新分支是"实验存档",随时可以切换,做坏了直接删掉,稳定存档不受影响。
三、基础操作流程
实际使用时,80% 的时间只会用到这几个命令。按顺序来看。
3.1 初始化仓库
git init
在当前目录创建一个 git 仓库。只需要执行一次。
3.2 查看状态
git status
这是最常用的命令,随时可以执行,告诉你当前有哪些文件改了、哪些还没提交。养成习惯,操作前先 git status 看一眼。
输出大概长这样:
Changes not staged for commit:
modified: app.py
Untracked files:
requirements.txt
- modified:已有的文件被改了,但还没告诉 git
- Untracked:新文件,git 还不知道它的存在
3.3 暂存:git add
git add app.py # 暂存单个文件
git add . # 暂存当前目录所有改动
git add 的作用不是"保存",而是选择哪些改动要放进下一次提交,这一步叫"暂存"(staging)。
为什么需要这一步?
因为你可能同时改了多个文件,但只想提交其中部分。git add 让你精确控制提交内容。
3.4 提交:git commit
git commit -m "add login function"
把暂存区的内容正式记录为一个 commit。-m 后面是提交说明,写清楚"做了什么",方便将来查看历史。

工作区 → 暂存区 → 仓库,这三步是 git 最核心的工作流。add 是"选好要提交的",commit 才是"真正记录下来"。
3.5 查看历史:git log
git log –oneline
列出所有历史 commit,–oneline 让每条记录只占一行,看起来更清晰:
a3f9b12 add login function
7c2e841 init project structure
左边是 commit ID,右边是你写的提交说明。
3.6 推送到 GitHub:git push
本地有了 commit,推到 GitHub:
git push origin main
origin 是远程仓库的别名(默认),main 是要推的分支。
第一次推送需要先关联远程仓库:
git remote add origin https://github.com/你的用户名/仓库名.git
git push -u origin main # -u 建立追踪关系,以后直接 git push 就行
3.7 拉取最新代码:git pull
别人推了新代码,你想同步到本地:
git pull
git pull = git fetch(拉取远程改动)+ git merge(合并到当前分支)。多人协作时,改代码前先 git pull 是好习惯。
四、完整操作一遍
把上面的命令串起来,走一遍完整流程。
4.1 在项目目录初始化仓库
git init
git branch -M main # 把默认分支改名为 main
4.2 将改动暂存
git add .
4.3 查看当前状态
git status
4.4 提交
git commit -m "init: add project files"
4.5 关联Github仓库(只需一次)
git remote add origin https://github.com/你的用户名/仓库名.git
4.6 推送
git push origin main
之后每次改完代码,重复第 2-4 步,再 git push 同步到 GitHub。
五、常见问题
5.1 git add . 和 git add 文件名 用哪个?
一般用 git add . 更省事,但要注意别把不该提交的文件(比如 .env、本地配置)也加进去。可以创建 .gitignore 文件,把不想追踪的文件写进去,git 会自动忽略它们。
5.2 commit message 怎么写?
格式约定:类型: 简短说明,比如:
-
feat: add user login
-
fix: correct password validation
-
init: project setup
不需要写"修改了第 23 行",message 说的是为什么改或改了什么功能。
5.3 推送时要输入密码?
- GitHub 不再支持密码认证
- 用 Personal Access Token(PAT)或 SSH key 替代
- 推荐配置 SSH,一劳永逸
六、总结
你现在掌握了 git 的核心工作流:init → add → commit → push,以及随时查看状态的 status 和 log。
这套流程够你完成大部分独立项目的版本管理。下一个要理解的是分支,当你需要和别人协作,或者想在不影响主线的情况下尝试新功能时,分支是核心工具。




