Git入门指南:从零开始掌握版本控制

你有没有经历过这样的噩梦?项目文件夹里到处是 最终版.doc、最终版2.doc、打死不改版.doc、真的最后版.doc...每次回滚代码都要手动复制备份,团队协作时互相覆盖文件,谁改了什么完全不知道。
这就是没有版本控制的痛。而Git,就是终结这一切的利器。
什么是版本控制?
想象你在写一本小说,每写完一章就保存一个副本。突然你发现第三章的情节有问题,想回到第二章重新写。如果没有版本控制,你只能手动翻备份文件夹,祈祷自己当时保存了。
版本控制系统就像是给项目装了一个时光机。它记录了每次修改的快照,你可以随时回到任意历史版本,查看谁在什么时候改了什么,甚至可以创建平行世界(分支)来尝试不同的剧情走向。
为什么是Git?
2005年,Linux内核开发社区遭遇了一场危机:他们使用的专有版本控制系统BitKeeper不再免费提供。Linux之父Linus Torvalds在短短两周内开发出了Git的初始版本。
Git的设计哲学很简单:快、简单、支持非线性开发(成千上万个并行分支)、完全分布式。这些特性让它迅速成为全球最流行的版本控制系统。今天,从Google到Microsoft,从Facebook到阿里巴巴,几乎每家科技公司都在用Git。
安装Git
Windows用户:
从官网下载安装包(https://git-scm.com/download/win),一路下一步即可。安装完成后,右键菜单会多出"Git Bash Here"选项,这就是你的Git命令行工具。
Mac用户:
最简单的方式是安装Xcode Command Line Tools:
xcode-select --install
或者用Homebrew:
brew install git
Linux用户:
Debian/Ubuntu:
sudo apt-get install git
CentOS/RHEL:
sudo yum install git
安装完成后,验证一下:
git --version
看到版本号就说明安装成功了。
第一次配置
Git需要知道你是谁,因为每次提交都会记录作者信息。打开终端,运行:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
这里的名字和邮箱最好和你的GitHub/GitLab账号一致,这样后续协作会更方便。
查看配置:
git config --list
创建你的第一个仓库
方式一:初始化新仓库
创建一个新项目文件夹,进入后执行:
mkdir my-first-project
cd my-first-project
git init
这时候Git会在当前目录创建一个隐藏的.git文件夹,所有版本信息都存在这里。
方式二:克隆已有仓库
如果项目已经存在于远程(比如GitHub),直接克隆:
git clone https://github.com/username/repo.git
理解Git的三个区域
这是理解Git最关键的概念。Git有三个逻辑区域:
- 工作区(Working Directory):你看到的文件,正在编辑的地方
- 暂存区(Staging Area/Index):准备提交的修改,像购物车
- 版本库(Repository):已提交的历史记录,像仓库
graph LR
A[工作区] -->|git add| B[暂存区]
B -->|git commit| C[版本库]
C -->|git checkout| A
为什么需要暂存区?
假设你修改了三个文件:A、B、C。其中A和B是同一个功能,C是另一个功能。你可以把A和B先add到暂存区,commit成一个提交;然后再add C,commit成另一个提交。这样提交历史就很清晰,而不是把所有修改混在一起。
日常操作流程
1. 查看状态
git status
这是最常用的命令,告诉你哪些文件被修改了,哪些在暂存区,哪些还没被跟踪。
2. 添加到暂存区
# 添加单个文件
git add filename.txt
# 添加所有修改
git add .
# 添加所有修改(包括删除)
git add -A
3. 提交到版本库
git commit -m "简洁的提交信息"
提交信息很重要!好的提交信息应该回答:做了什么修改?为什么这样修改?
4. 查看历史
# 完整历史
git log
# 简洁版(一行一个提交)
git log --oneline
# 图形化显示分支
git log --oneline --graph --all
5. 查看差异
# 工作区 vs 暂存区
git diff
# 暂存区 vs 最新提交
git diff --staged
# 两个提交之间
git diff commit1 commit2
撤销操作(救你于水火)
撤销工作区修改
# 丢弃单个文件的修改(危险操作!)
git checkout -- filename.txt
# 或者用新语法
git restore filename.txt
撤销暂存
# 把文件从暂存区移回工作区
git reset HEAD filename.txt
# 或者用新语法
git restore --staged filename.txt
修改最后一次提交
# 还没push,发现提交信息写错了
git commit --amend -m "正确的提交信息"
# 还没push,漏了一个文件
git add forgotten-file.txt
git commit --amend --no-edit
注意:--amend会改写历史,如果已经push了就不要用,否则会给队友带来麻烦。
忽略文件
有些文件不需要纳入版本控制,比如编译产物、日志文件、IDE配置等。在项目根目录创建.gitignore文件:
# 编译产物
*.o
*.exe
build/
# 日志
*.log
# IDE配置
.idea/
.vscode/
# 系统文件
.DS_Store
Thumbs.db
# 依赖目录
node_modules/
.venv/
GitHub有个awesome-gitignore仓库,收集了各种项目的.gitignore模板,值得收藏。
远程仓库
关联远程仓库
# 添加远程仓库
git remote add origin https://github.com/username/repo.git
# 查看远程仓库
git remote -v
推送代码
# 第一次推送(设置上游分支)
git push -u origin main
# 之后推送
git push
拉取代码
# 拉取并合并
git pull
# 只拉取不合并
git fetch
git pull = git fetch + git merge。建议先fetch看看有什么变化,再决定要不要merge。
SSH配置(告别密码)
每次push都要输入密码很烦?配置SSH密钥:
# 生成密钥对
ssh-keygen -t ed25519 -C "你的邮箱"
# 查看公钥
cat ~/.ssh/id_ed25519.pub
把公钥复制到GitHub的Settings → SSH Keys。然后把远程地址改成SSH格式:
git remote set-url origin git@github.com:username/repo.git
现在push再也不用输密码了。
小结
恭喜你,掌握了Git的基础用法。你现在可以:
- 创建和管理仓库
- 理解工作区、暂存区、版本库
- 进行日常的add、commit、push、pull操作
- 撤销误操作
- 配置.gitignore和SSH
但这只是Git冰山一角。下一期,我们将深入分支管理——Git最强大的功能之一。你会学会如何创建平行宇宙,在不同的开发线之间自由穿梭,最后把它们完美合并。
练习任务:
- 创建一个新仓库,提交至少3次
- 尝试修改文件后用
git checkout撤销 - 故意add一个文件,然后用
git reset HEAD撤销暂存 - 在GitHub创建仓库,把本地代码push上去
做完这些,你就真正入门Git了。
下期预告:《Git进阶:分支管理艺术》—— 什么时候该开分支?如何优雅地合并?冲突了怎么办?
Views: 2
