4、Git基本操作:git init、git clone、git add、git commit、git status、git log

好,咱们进入正题。Git 的基本操作,说白了就是你和代码仓库打交道的日常。我见过不少新手,一上来就背命令,结果遇到问题还是懵。其实你只要理解这几个核心动作,后面就顺了。

先看一张图,帮你快速建立整体认知:

Git 基本操作流程 工作区 你写代码的地方 暂存区 准备提交的临时区域 本地仓库 历史版本存储地 git add git commit 远程仓库 GitHub / GitLab / 公司服务器 git push git pull / clone git status 随时查看状态 git log 查看提交历史

4.1 git init — 从零开始建仓库

git init 是在当前目录下创建一个新的 Git 仓库。说白了,就是告诉 Git:「嘿,这个文件夹我要管起来了!」

我个人习惯,拿到一个新项目,第一件事就是跑 git init。哪怕项目还没写一行代码,先把版本控制搭好,心里踏实。

# 创建一个新目录并初始化
mkdir my-project
cd my-project
git init

# 或者对已有项目初始化
cd existing-project
git init

运行后,目录下会多出一个 .git 隐藏文件夹。别手贱去删它,删了版本历史就全没了。我曾经有个同事,清理磁盘时把 .git 文件夹删了,结果整个项目的提交记录全丢了,那叫一个惨。

小提示: 如果你只是想看看仓库状态,不想真的初始化,可以用 git status 先试探一下。如果提示「fatal: not a git repository」,那就说明还没初始化。

4.2 git clone — 把别人的仓库搬回家

git clone 是从远程服务器复制一个完整的仓库到本地。包括所有历史记录、分支、标签,一应俱全。

你想想看,团队协作时,你不可能每次都从头开始写。用 git clone 把项目拉下来,直接开干。

# 克隆 HTTPS 地址
git clone https://github.com/username/repo.git

# 克隆 SSH 地址(推荐,不用输密码)
git clone git@github.com:username/repo.git

# 克隆到指定目录
git clone https://github.com/username/repo.git my-folder

这里有个坑:克隆下来的仓库,默认只有一个分支——main 或 master。如果你需要其他分支,得手动切换。嗯,这个后面会细讲。

4.3 git add — 把改动「请」进暂存区

你改完代码,Git 不会自动跟踪。你得用 git add 告诉它:「这些文件我要提交了,先放暂存区等着。」

我刚开始用 Git 时,经常忘记 git add,直接 git commit,结果提示「nothing to commit」。当时还以为是 Git 坏了,后来才明白——add 是提交的前置步骤,缺一不可。

# 添加单个文件
git add index.html

# 添加多个文件
git add style.css script.js

# 添加当前目录所有改动(慎用!)
git add .

# 交互式添加(推荐,可以挑着加)
git add -p
注意: 我强烈建议不要无脑用 git add .。你想想看,万一你改了个配置文件,里面不小心写了密码,这一加就全进去了。用 git add -p 可以逐块审查,安全很多。

4.4 git commit — 拍一张快照

git commit 是把暂存区的内容正式保存到本地仓库。每次提交就像拍了一张照片,以后可以随时回到这个时间点。

提交信息一定要写清楚。我见过有人写「fix bug」、「update」,甚至「111」——这种信息过一个月你自己都看不懂。好的提交信息应该说明「为什么改」和「改了什么」。

# 基本提交
git commit -m "修复登录页面的验证码超时问题"

# 提交并自动添加所有已跟踪文件的改动(跳过 add)
git commit -a -m "更新用户头像上传逻辑"

# 写多行提交信息(会打开编辑器)
git commit

我个人习惯用 git commit -m 加简短描述。如果改动比较复杂,我会用编辑器写多行,第一行是标题,空一行后写详细说明。

核心原则: 每次提交应该是一个逻辑完整的改动。不要一个提交里既改样式又改数据库,拆开提交,以后回滚也方便。

4.5 git status — 随时看看仓库状态

git status 是我用得最多的命令,没有之一。它告诉你当前工作区、暂存区、本地仓库之间的差异。

你想想看,你改了一堆文件,到底哪些还没 add?哪些已经 add 了但没 commit?git status 一目了然。

# 查看完整状态
git status

# 简洁模式(推荐)
git status -s

简洁模式下,?? 表示未跟踪的文件,M 表示已修改,A 表示已添加到暂存区。嗯,这个输出格式很紧凑,我平时都用这个。

状态符号 含义 说明
?? 未跟踪 新文件,Git 还不知道它
M 已修改 文件内容有变动,但未 add
A 已暂存 已 add,等待 commit
D 已删除 文件被删除了

4.6 git log — 翻翻历史账本

git log 显示提交历史。每次提交都有一个唯一的 SHA-1 哈希值,就像身份证号一样。

我曾经排查一个线上 bug,需要找到「到底是哪次提交引入了问题」。用 git log 配合 git diff,很快就定位到了。没有历史记录,你只能靠猜。

# 查看完整日志
git log

# 简洁的一行模式
git log --oneline

# 图形化显示分支合并历史
git log --graph --oneline --all

# 查看某个文件的修改历史
git log --follow filename

--oneline 模式特别实用,每个提交只显示一行,一眼扫过去就能看到整个脉络。我平时查历史基本都用这个。

小技巧: 如果你觉得 git log 输出太长,按 q 键退出。按 空格 翻页,按 回车 逐行滚动。

4.7 实战:一个完整的操作流程

把上面这些命令串起来,就是一个标准的 Git 工作流。我带你走一遍:

# 1. 初始化或克隆
git init my-app
cd my-app

# 2. 写代码... 然后查看状态
git status

# 3. 把改动加入暂存区
git add index.html style.css

# 4. 提交
git commit -m "完成首页布局和样式"

# 5. 再改点东西,查看历史
git log --oneline

你看,就这么几步。刚开始可能会觉得麻烦,但用顺手了,你会发现没有 Git 简直没法干活。

总结一下: init 建仓库,clone 拉代码,add 进暂存,commit 存历史,status 看状态,log 查记录。这六个命令,就是 Git 操作的基石。

嗯,今天就先聊到这儿。这些命令你多敲几遍,肌肉记忆就形成了。下次我们聊聊分支操作——那才是 Git 真正强大的地方。


可可精品资料库