今日目标: 完成 Git 的初始配置,并完全掌握在本地对项目进行版本控制的核心工作循环。
这是我们开始 Git 之旅的第一步,确保我们的工具已经就绪并且“认识”我们。
- 命令:
git --version
- 它是什么: 检查电脑上安装的 Git 版本。
- 它为什么重要: 确认 Git 已被正确安装,可以开始使用。我们的版本是
2.49.0,非常新。
- 命令:
git config --global user.name "Gzito" git config --global user.email "gjm13635248896@gmail.com"
- 它是什么: 设置你在这个电脑上所有 Git 仓库的“作者签名”。
--global意味着这是全局配置,一劳永逸。 - 它为什么重要: 这是 Git 世界的“实名制”。你未来的每一次提交(commit)都会用这个名字和邮箱来署名。这是为了追溯历史和团队协作,让所有人知道每一次改动是谁做的。
在敲下第一个命令之前,我们先理解了 Git 的设计哲学。
- 我遇到的问题: “书上没讲什么是‘分布式版本控制’,这是什么意思?”
- 你的解答 (图书馆比喻):
中心化 (如 SVN) 就像一个城市的总图书馆。你要改东西,必须先联网去总馆借,改完再还回去。总馆关门了,所有人都干不了活。 分布式 (Git) 就像是你
clone一个项目时,把整个图书馆的完整复刻版(包括所有历史记录)都搬到了你的电脑上。你在本地提交,就是在你自己的“私人图书馆”里操作,完全不需要联网。需要协作时,再把你本地的更新“推送”到 GitHub 这种公共的远程图书馆。 - 学这个有什么用: 理解了“分布式”,就理解了为什么 Git 的绝大部分操作(commit, log, diff)都飞快无比,而且不依赖网络。这是 Git 最核心的优势。
我们在这里,把一个普通的文件夹,变成了一个拥有版本控制能力的 Git 仓库。
- 命令:
git init
- 它是什么: 在当前目录下创建一个新的 Git 仓库。它会生成一个隐藏的
.git目录。 - 它为什么重要: 这个
.git目录就是我们之前比喻的“本地图书馆”,它包含了我们项目的所有历史快照和元数据。它是 Git 的一切核心所在。
- 我遇到的问题: “我不小心创建了
master分支,但书上推荐用main,怎么改?” - 命令:
git branch -M main
- 它是什么:
-M强制性地将当前分支重命名为main。 - 它为什么重要:
main是现在业界推荐的默认分支名,这是一种好的实践。
这是我们今天学习的重点,也是未来使用 Git 90% 的时间在做的事情。
- 工作区 (Working Directory): 你能直接看到的项目文件夹。
- 暂存区 (Staging Area / Index): 一个临时的存储区域,像一个“购物车”,用来存放你准备在下一次提交中包含的改动。
- 本地仓库 (Local Repository / .git): 你项目的完整历史数据库。
- 命令:
git status - 它是什么: 随时告诉你工作区和暂存区里每个文件的状态。
- 它为什么重要: 这是你最常用的命令。它会清晰地告诉你哪些文件是“未跟踪的 (Untracked)”,“已修改待暂存的 (Changes not staged for commit)”,或是“已暂存待提交的 (Changes to be committed)”。
- 命令:
git add <文件名> - 它是什么: 将工作区的修改(新文件或文件的改动)添加到暂存区。
- 它为什么重要: 这是从“我改了代码”到“我准备提交这些代码”的关键一步。它让你能精确控制哪些修改要被包含在下一次的快照中,从而实现干净、原子的提交。
- 命令:
git commit -m "你的提交信息" - 它是什么: 将暂存区的所有内容生成一个永久性的快照,并保存在本地仓库的历史记录中。
- 它为什么重要: 这是 Git 的核心目的——创建项目历史。
-m后的提交信息至关重要,它是你写给未来自己和同事的“历史日志”。
我们不仅要会前进,更要会回顾和“后悔”。
- 我遇到的问题: “
git log只能看到提交信息,怎么看每次提交改了哪些文件?” - 命令:
git log --stat: 查看每次提交的文件统计信息。git log -p: 查看每次提交的具体代码改动(补丁)。
- 它为什么重要: 让你能清晰地回顾项目的演进过程,追踪每一次变更的细节。
- 命令:
git diff: 查看工作区 vs 暂存区的差异。git diff --staged: 查看暂存区 vs 上次提交 (HEAD) 的差异。
- 它为什么重要: 让你在提交前能精确地检查自己的修改,确保不会提交错误或多余的代码。
- 我遇到的问题: “
git restore好像没起作用?文件内容还在。” - 你的解答: 这是因为文件当时是未跟踪 (untracked) 状态。
restore命令主要作用于已跟踪的文件。在我们完成一次commit让文件被跟踪后,一切就正常了。 - 命令:
git restore --staged <文件名>: 撤销暂存。把文件从暂存区拿回来,但保留工作区的修改。git restore <文件名>: 彻底撤销工作区的修改。让文件恢复到和上次提交时一模一样的状态(危险操作!)。
- 学这个有什么用: 让你能轻松应对“add错文件”或“写错代码想放弃”的场景。
- 命令:
git commit --amend - 它是什么: 一个强大的“修正”工具。它不会创建新的提交,而是让你修改最后一次提交,可以同时补充忘记
add的文件和修改提交信息。 - 它为什么重要: 能让你的提交历史保持整洁、专业,避免因为小错误(如拼写错误)而产生大量琐碎的修正提交。
今日总结: 我已经成功地在本地建立了一个 Git 仓库,并熟练掌握了 add, commit, log, status, diff, restore, amend 等核心命令。我已经准备好明天学习更高级的分支操作了!