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

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

Git Logo

你有没有经历过这样的噩梦?项目文件夹里到处是 最终版.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有三个逻辑区域:

  1. 工作区(Working Directory):你看到的文件,正在编辑的地方
  2. 暂存区(Staging Area/Index):准备提交的修改,像购物车
  3. 版本库(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最强大的功能之一。你会学会如何创建平行宇宙,在不同的开发线之间自由穿梭,最后把它们完美合并。


练习任务

  1. 创建一个新仓库,提交至少3次
  2. 尝试修改文件后用git checkout撤销
  3. 故意add一个文件,然后用git reset HEAD撤销暂存
  4. 在GitHub创建仓库,把本地代码push上去

做完这些,你就真正入门Git了。


下期预告:《Git进阶:分支管理艺术》—— 什么时候该开分支?如何优雅地合并?冲突了怎么办?

Views: 2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Index