Git 作为目前最主流的分布式版本控制系统,是每一位开发者的必备工具。很多新手入门 Git 时,容易被繁杂的命令和概念劝退,其实只要掌握核心操作逻辑,就能快速上手。本文聚焦 Git 基础的四大核心模块——获取 Git 仓库、记录每次更新、查看提交历史、撤消操作,用通俗易懂的语言+实操命令,帮你打通 Git 入门的“任督二脉”,看完就能直接上手实操。
本文核心内容参考自 Git 官方文档及开源项目规范,关键参考链接:Git 官方文档:Git - 获取 Git 仓库
一、获取 Git 仓库:两种方式,快速拥有可操作仓库
想要使用 Git 管理项目,首先要获取一个 Git 仓库。Git 提供了两种最常用的方式,覆盖“从零开始”和“复用现有项目”两种场景,操作简单且无门槛。
1. 方式一:将本地已有目录转为 Git 仓库
如果你的电脑上已经有一个项目目录(未进行版本控制),想要用 Git 管理它,只需3步操作,不同系统的命令略有差异,但核心逻辑一致。
步骤拆解:
-
进入项目目录(不同系统命令):
- Linux 系统:
cd /home/user/my_project - macOS 系统:
cd /Users/user/my_project - Windows 系统:
cd /c/user/my_project
- Linux 系统:
-
初始化 Git 仓库:
git init执行该命令后,会在项目目录下生成一个隐藏的.git子目录,这个目录包含了 Git 仓库的所有核心文件(仓库骨干),此时项目文件还未被 Git 跟踪。 -
开始跟踪文件并完成初始提交:
git add *.c # 跟踪所有 .c 后缀的文件(可替换为具体文件名) `` git add LICENSE # 跟踪 LICENSE 文件 ``git commit -m 'initial project version' # 提交,备注初始版本信息执行完成后,你就拥有了一个带有跟踪文件和初始提交的 Git 仓库,后续的所有修改都能被 Git 记录。
2. 方式二:克隆已存在的远程仓库
如果想要参与一个已有的开源项目,或者复用自己/团队的远程仓库,就需要使用 git clone命令,它会完整拷贝远程仓库的所有数据(包括所有版本历史),相当于“一键复制+初始化”。
核心命令:
git clone <远程仓库URL>
实操示例:克隆 Git 链接库 libgit2(开源项目,地址:github.com/libgit2/lib…
git clone https://github.com/libgit2/libgit2
执行后,会在当前目录下生成一个名为 libgit2 的文件夹,里面包含了该项目的所有文件和.git 仓库目录,无需额外初始化,直接可以进行开发和修改。
补充技巧:如果想自定义本地仓库的名字,可在命令末尾添加自定义名称:
git clone https://github.com/libgit2/libgit2 mylibgit # 本地仓库名改为 mylibgit
Git 支持多种传输协议(https://、git://、SSH 等),后续会详细介绍不同协议的配置和使用场景。
二、记录每次更新:掌握文件状态,规范提交流程
获取仓库后,日常开发的核心就是“修改文件→记录修改”,这一过程的关键是理解 Git 中文件的两种核心状态:已跟踪和未跟踪,以及三种状态流转:已修改、已暂存、已提交。
1. 先搞懂:文件的状态与生命周期
- 已跟踪文件:被 Git 纳入版本控制的文件,在上一次提交中有记录,状态可分为“未修改”“已修改”“已暂存”。
- 未跟踪文件:未被 Git 记录的文件,既不在上次提交的快照中,也未被放入暂存区(如新建的文件)。
文件生命周期流转:工作区修改文件(已修改)→ git add 暂存(已暂存)→ git commit 提交(已提交),这是 Git 记录更新的标准流程。
2. 核心操作:查看状态、暂存、提交
(1)查看文件状态:git status
无论做了什么修改,都可以用 git status 查看当前文件的状态,它会清晰告诉你哪些文件已修改、哪些未跟踪、哪些已暂存。
实操示例(克隆仓库后首次查看):
git status
# 输出结果(干净的工作区)
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
如果新建一个 README 文件,再查看状态:
echo 'My Project' > README # 新建文件
git status
# 输出结果(未跟踪文件)
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
(2)跟踪文件/暂存修改:git add
git add 是一个“多功能命令”,核心作用是“将内容添加到下一次提交中”,具体用法有3种:
- 跟踪新文件:
git add 文件名(如git add README),执行后文件变为“已暂存”状态。 - 暂存已修改文件:
git add 文件名(如git add CONTRIBUTING.md),将已修改的文件纳入暂存区。 - 跟踪目录下所有文件:
git add .(注意末尾的点),一次性跟踪当前目录下所有未跟踪和已修改的文件。
注意:如果暂存文件后,又对该文件做了修改,需要重新执行 git add,否则提交时只会记录上一次暂存的版本。
(3)提交修改:git commit
暂存区准备就绪后,用 git commit 命令将暂存的快照提交到 Git 仓库,完成一次修改记录。
常用用法:
git commit -m "提交备注信息" # 直接在命令行填写备注
git commit # 启动文本编辑器填写备注(需提前配置编辑器)
提交备注建议清晰、简洁,说明本次修改的内容(如“修复登录功能bug”“新增用户列表页面”),便于后续查看历史。
补充技巧:跳过暂存区,直接提交已跟踪文件的修改:
git commit -a -m "提交备注" # -a 选项会自动暂存所有已跟踪的修改文件
3. 实用技巧:忽略文件与查看差异
(1)忽略文件:.gitignore
开发中总会有一些文件无需纳入 Git 管理(如日志文件、编译生成的临时文件、IDE 配置文件),此时可以创建 .gitignore 文件,列出需要忽略的文件模式,Git 会自动跳过这些文件。
.gitignore 格式规范:
- 空行或 # 开头的行,会被 Git 忽略(可用于添加注释)。
- 使用 glob 模式匹配(如
*.log忽略所有 .log 后缀的文件)。 - 以 / 开头,防止递归匹配;以 / 结尾,指定忽略目录。
- 叹号(!)取反,忽略指定模式以外的文件(如
!lib.a表示不忽略 lib.a 文件)。
示例 .gitignore 文件:
# 忽略所有 .o 和 .a 文件
*.o
*.a
# 不忽略 lib.a
!lib.a
# 忽略当前目录下的 TODO 文件
/TODO
# 忽略所有 build 目录
build/
# 忽略 doc 目录下的所有 .pdf 文件
doc/**/*.pdf
补充:GitHub 提供了数十种语言和项目的标准 .gitignore 模板,可直接参考使用:github.com/github/giti…
(2)查看差异:git diff
想要查看具体修改了哪些内容,可用 git diff 命令,核心用法有两种:
- 查看未暂存的修改:
git diff(对比工作区与暂存区的差异)。 - 查看已暂存的修改:
git diff --staged(对比暂存区与上一次提交的差异)。
三、查看提交历史:追溯修改,清晰定位
提交多次修改后,想要回顾历史记录、查看某一次修改的细节,就需要用到 git log 命令。它能按时间顺序列出所有提交,还能通过各种选项过滤和格式化输出,满足不同需求。
1. 基础用法:查看所有提交历史
git log
默认输出会包含每个提交的 SHA-1 校验和(唯一标识)、作者、提交时间、提交备注,最近的提交排在最上面。
示例输出(以 simplegit-progit 项目为例,项目地址:github.com/schacon/sim…
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
2. 常用选项:过滤和格式化输出
如果提交记录较多,默认输出会过于繁琐,可通过以下选项精简和定制输出:
git log -p -n:显示最近 n 次提交的详细差异(n 为数字,如git log -p -2显示最近2次修改)。git log --stat:显示每次提交的文件修改统计(修改的文件、新增/删除行数)。git log --pretty=oneline:将每个提交压缩到一行显示(适合快速浏览)。git log --pretty=format:"%h - %an, %ar : %s":定制输出格式(%h 简写哈希、%an 作者名、%ar 相对时间、%s 提交备注)。git log --since=2.weeks:显示最近两周的提交(支持具体日期,如--since=2026-01-01)。git log --author="作者名":显示指定作者的提交。
四、撤消操作:弥补失误,安全回滚
开发中难免会出现失误(如提交信息写错、暂存了不需要的文件、修改错了文件),Git 提供了多种撤消操作的方法,关键是根据“失误场景”选择合适的命令,避免误操作导致数据丢失。
1. 场景1:提交后发现信息写错/漏暂存文件
如果提交后,发现提交信息写错,或者忘记暂存某些文件,可使用 git commit --amend 命令“修补”最近一次提交,替换原来的提交记录。
实操示例:
git commit -m "initial commit" # 错误提交(漏暂存文件)
git add forgotten_file # 补充暂存遗漏的文件
git commit --amend # 修补提交,修改提交信息或补充暂存文件
注意:修补提交会完全替换上一次的提交记录,相当于上一次提交从未存在过,仅适用于未推送到远程仓库的提交。
2. 场景2:取消暂存的文件
如果不小心暂存了不需要的文件(如 git add * 暂存了所有文件),可使用 git reset HEAD <文件名> 取消暂存,文件会回到“已修改”状态。
实操示例:
git add * # 误暂存所有文件
git reset HEAD CONTRIBUTING.md # 取消暂存 CONTRIBUTING.md 文件
3. 场景3:撤消对文件的本地修改
如果修改了文件,但不想保留这些修改,想还原到上一次提交的状态,可使用 git checkout -- <文件名> 命令,注意:该命令会彻底删除本地修改,无法恢复,请谨慎使用。
实操示例:
git checkout -- CONTRIBUTING.md # 撤消对该文件的所有本地修改
补充:如果想保留本地修改,只是暂时撤消,可使用 Git 分支或 stash 功能(后续会详细介绍)。
五、新手必看:注意事项与避坑指南
- 提交备注要规范:避免使用“修改”“更新”等模糊词汇,清晰说明修改目的,便于后续追溯。
- 慎用危险命令:
git checkout -- <文件>、git reset --hard会删除本地修改,执行前务必确认是否需要保留数据。 - .gitignore 要提前配置:避免提交临时文件、日志文件等无用内容,保持仓库整洁。
- 提交前必查状态:每次提交前,用
git status检查暂存区和工作区状态,避免漏提交或误提交。 - 已提交的内容可恢复:Git 中任何已提交的记录,几乎都能通过相关命令恢复,不必担心误提交导致数据丢失。
六、总结:Git 基础核心,实操为王
Git 基础的四大核心操作——获取仓库、记录更新、查看历史、撤消操作,涵盖了日常开发中 80% 的使用场景。其实 Git 不难,关键在于理解“文件状态”和“提交逻辑”,多动手实操,熟练掌握每一个命令的用法和场景,就能快速上手。
新手建议:先从简单的命令开始(git init、git add、git commit、git log),逐步尝试复杂操作,遇到问题多查看官方文档和开源项目示例,慢慢就能形成自己的 Git 使用习惯。记住:Git 的核心是“记录和协作”,用好这些基础操作,就能高效管理代码、轻松应对团队协作。