这门课不会把命令拆成互不相干的清单。我们会一直维护同一个“团队任务板”项目:先安装 Git,接着保存版本、建立分支、模拟两位成员协作,最后定位一次真实的错误并发布 v1.1.0。

完成这一节后,你会得到可用的 Git 命令、明确的提交身份,以及统一的主分支名称。后面每一节都建立在这三个结果上。
假设你正在维护 tasks.md。你可能会复制出 tasks-最终版.md、tasks-最终版2.md,但这些文件回答不了三个问题:哪一处发生了变化、谁做了修改、怎样可靠地回到某个版本。
版本控制系统会记录一组文件随时间发生的变化。Git 每次提交都保存项目当时的快照,并把快照连接成历史。你可以比较两个快照、建立独立开发线,也可以在合并前检查别人带来的变化。
我们先记住四个词:
Git 不只管理代码。只要文件适合比较变化,文档、配置和课程材料也可以纳入版本控制。大型二进制文件需要另外设计存储方式,这不影响我们先学会核心流程。
选择你的操作系统,只执行对应的一组命令。安装程序需要下载软件时,应保持网络可用。
在 PowerShell 中使用 Windows 包管理器:
winget install --id Git.Git -e --source winget也可以从 Git 官方下载页 获取 Git for Windows。安装完成后,重新打开终端。
如果已经安装 Homebrew:
brew install git也可以执行 git --version,系统在缺少开发者命令行工具时会给出安装提示。
sudo apt update
sudo apt install -y gitsudo dnf install -y git安装命令完成后,不要凭“没有报错”判断结果。直接询问 Git 的版本:
git --version结果示例:
git version 2.43.0你的版本号可以不同。只要能看到 git version 和具体版本,当前终端就能找到 Git。
如果安装阶段出现 Failed to fetch、超时或证书错误,先检查网络和软件源,再重新执行安装命令。那类信息表示安装包没有成功取得,不等于 Git 命令本身损坏。
每次提交都会永久记录作者姓名和邮箱。先把示例替换成你希望显示在项目历史里的信息:
git config --global user.name "小林"
git config --global user.email "xiaolin@example.com"
git config --global init.defaultBranch main
git config --global core.quotepath false--global 表示这些设置属于当前用户,会被之后创建的仓库采用。四行配置分别控制:
main;现在逐项读取,确认写入结果:
git config --global --get user.name
git config --global --get user.email
git config --global --get init.defaultBranch结果示例:
小林
xiaolin@example.com
main如果某一项没有输出,说明键名写错或配置没有保存,重新执行对应的 git config 命令即可。
工作中常会遇到“个人项目用个人邮箱,公司项目用公司邮箱”的情况。进入某个仓库后,可以去掉 --global 单独覆盖:
git config user.name "小林"
git config user.email "xiaolin@company.example"查询最终生效值及其来源:
git config --list --show-originGit 会把更具体的仓库配置放在全局配置之上。这个规则能让你保留一套默认值,同时为少数项目调整身份。
后面的命令默认从你准备用于练习的位置开始。现在只创建总目录,不初始化仓库:
mkdir git-course
cd git-course我们的项目会叫 team-task-board。它最终包含以下内容:
team-task-board/
├── README.md
├── tasks.md
├── settings.conf
└── scripts/
└── check-settings.sh此刻这些文件还不存在。下一节会从空目录开始创建它们,并用第一条提交把起点保存下来。
执行 git --version。能看到版本号,说明 Git 已可用;如果命令不存在,就先重新打开终端,再检查安装是否完成。
执行 git config --global --get user.name 和 git config --global --get user.email。两项都应显示你自己的提交身份。
执行 git config --global --get init.defaultBranch。结果应为 main,这样后续输出和课程保持一致。