Git 基础实操全解析:从获取仓库到撤消操作,新手也能轻松上手

2 阅读11分钟

Git 作为目前最主流的分布式版本控制系统,是每一位开发者的必备工具。很多新手入门 Git 时,容易被繁杂的命令和概念劝退,其实只要掌握核心操作逻辑,就能快速上手。本文聚焦 Git 基础的四大核心模块——获取 Git 仓库、记录每次更新、查看提交历史、撤消操作,用通俗易懂的语言+实操命令,帮你打通 Git 入门的“任督二脉”,看完就能直接上手实操。

本文核心内容参考自 Git 官方文档及开源项目规范,关键参考链接:Git 官方文档:Git - 获取 Git 仓库

一、获取 Git 仓库:两种方式,快速拥有可操作仓库

想要使用 Git 管理项目,首先要获取一个 Git 仓库。Git 提供了两种最常用的方式,覆盖“从零开始”和“复用现有项目”两种场景,操作简单且无门槛。

1. 方式一:将本地已有目录转为 Git 仓库

如果你的电脑上已经有一个项目目录(未进行版本控制),想要用 Git 管理它,只需3步操作,不同系统的命令略有差异,但核心逻辑一致。

步骤拆解

  1. 进入项目目录(不同系统命令):

    1. Linux 系统:cd /home/user/my_project
    2. macOS 系统:cd /Users/user/my_project
    3. Windows 系统:cd /c/user/my_project
  2. 初始化 Git 仓库:git init执行该命令后,会在项目目录下生成一个隐藏的 .git 子目录,这个目录包含了 Git 仓库的所有核心文件(仓库骨干),此时项目文件还未被 Git 跟踪。

  3. 开始跟踪文件并完成初始提交: 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 的核心是“记录和协作”,用好这些基础操作,就能高效管理代码、轻松应对团队协作。