2、版本控制系统:Git的安装与配置、Git基本工作流程、常用Git命令

版本控制这件事,说白了就是给你的代码装上一台「时光机」。我见过太多新手直接把项目文件夹复制粘贴当备份,结果三天后自己都分不清哪个是最新版。Git 就是来解决这个问题的——它不光能记录每一次修改,还能让你在不同版本之间自由穿梭。

核心认知:Git 不是备份工具,而是一个分布式版本控制系统。每个开发者本地都有一份完整的代码仓库历史,即使服务器挂了,你也能在本地继续工作。

2.1 Git 的安装与配置

安装 Git 其实很简单,但不同操作系统略有差异。我个人习惯在 Linux 环境下工作,不过 Windows 和 macOS 也完全没问题。

2.1.1 各平台安装方式

操作系统 安装方式 验证命令
Ubuntu/Debian sudo apt install git git --version
CentOS/RHEL sudo yum install git git --version
macOS 安装 Xcode Command Line Tools 或 brew install git git --version
Windows 下载 Git for Windows 安装包 git --version(Git Bash 中)

小技巧:安装完成后,第一件事就是配置你的身份信息。Git 每次提交都会记录作者,不配置的话会报错。

2.1.2 全局配置

配置用户名和邮箱,这是 Git 的「身份证」:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

还可以配置一些常用别名,提高效率。我一般会配这几个:

git config --global alias.st status
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.co checkout
git config --global alias.lg "log --oneline --graph --all"

配置完成后,用 git config --list 查看所有配置项。嗯,这里要注意——配置分三个级别:--system(系统级)、--global(用户级)、--local(仓库级),优先级从低到高。

2.2 Git 基本工作流程

Git 的工作流程,你想想看,其实就三个区域在来回倒腾:工作区、暂存区、版本库。我刚开始学的时候总搞混,后来画了张图才彻底明白。

Git 三大区域与文件流转 工作区 Working Directory 你实际编辑的目录 文件:index.html 暂存区 Staging Area 准备提交的快照 文件:index.html 版本库 Repository 历史记录存储 提交:abc1234 git add git commit git checkout / git reset 核心流程:工作区 → git add → 暂存区 → git commit → 版本库

工作流程其实就三步走:

  1. 在工作区修改文件——你打开编辑器,改代码、加文件、删文件,都在这里发生。
  2. 用 git add 把改动放到暂存区——暂存区就像购物车,你可以挑挑拣拣,只提交想提交的部分。
  3. 用 git commit 把暂存区的内容提交到版本库——每次提交都会生成一个唯一的哈希值,这就是一个历史版本。

我曾经踩过的坑:刚用 Git 时,我习惯一次性 git add . 把所有文件都扔进暂存区。结果有一次不小心把配置文件也提交了,里面还带着数据库密码。从那以后,我每次提交前都会用 git status 仔细检查,只提交该提交的文件。

2.3 常用 Git 命令

Git 命令很多,但日常开发中常用的就那么十几个。我把它们分成几类,方便你记忆。

2.3.1 仓库初始化与克隆

命令 作用 使用场景
git init 在当前目录初始化一个新仓库 开始一个新项目
git clone <url> 从远程仓库克隆到本地 参与已有项目

2.3.2 日常操作三板斧

这三个命令你每天都会用到,必须烂熟于心:

# 查看文件状态
git status

# 添加文件到暂存区
git add filename.txt        # 添加单个文件
git add .                   # 添加所有改动
git add *.js                # 添加所有 JS 文件

# 提交到版本库
git commit -m "feat: 添加用户登录功能"

提交信息怎么写?我建议遵循「约定式提交」规范:类型: 简短描述。比如 feat: 表示新功能,fix: 表示修复 bug,docs: 表示文档更新。这样看历史记录一目了然。

2.3.3 分支管理

分支是 Git 最强大的功能之一。你想想看,如果没有分支,所有人都在一条线上开发,改乱了怎么办?

# 查看分支
git branch                  # 查看本地分支
git branch -a               # 查看所有分支(包括远程)

# 创建分支
git branch feature-login    # 创建新分支
git checkout -b feature-login  # 创建并切换到新分支

# 切换分支
git checkout feature-login

# 合并分支
git merge feature-login     # 将 feature-login 合并到当前分支

我在项目中遇到过一个问题:两个同事同时修改了同一个文件的同一行代码,合并时就会产生冲突。这时候 Git 会告诉你哪些文件有冲突,你需要手动打开文件,找到冲突标记(<<<<<<<、=======、>>>>>>>),然后决定保留哪部分代码。

2.3.4 查看历史与回退

# 查看提交历史
git log                     # 完整历史
git log --oneline           # 简洁版
git log --oneline --graph   # 图形化显示分支

# 回退到某个版本
git reset --hard HEAD~1     # 回退到上一个版本
git reset --hard abc1234    # 回退到指定提交

# 撤销工作区的修改
git checkout -- filename.txt

注意:git reset --hard 会丢弃所有未提交的改动,慎用!我建议先用 git stash 暂存当前工作,再执行回退操作。

2.3.5 远程仓库操作

团队协作离不开远程仓库。GitHub、GitLab、Gitee 都是常见的托管平台。

# 添加远程仓库
git remote add origin https://github.com/yourname/project.git

# 推送代码到远程
git push origin main        # 推送到 main 分支
git push -u origin main     # -u 设置上游分支,后续可直接用 git push

# 拉取远程代码
git pull                    # 拉取并合并
git fetch                   # 只拉取,不合并

# 查看远程仓库信息
git remote -v

2.4 实战:一个完整的 Git 工作流

说了这么多,不如来一个完整的例子。假设你要开始一个新项目:

# 1. 初始化仓库
mkdir my-project
cd my-project
git init

# 2. 创建第一个文件
echo "# My Project" > README.md
git status                  # 看到 README.md 是未跟踪状态

# 3. 添加并提交
git add README.md
git commit -m "init: 初始化项目"

# 4. 创建开发分支
git checkout -b dev

# 5. 在 dev 分支上开发
echo "console.log('hello')" > app.js
git add app.js
git commit -m "feat: 添加 app.js"

# 6. 合并回主分支
git checkout main
git merge dev

# 7. 推送到远程
git remote add origin https://github.com/yourname/my-project.git
git push -u origin main

总结一下:Git 的核心就是「工作区 → 暂存区 → 版本库」这个流程。你只要记住 add、commit、push、pull 这四个命令,就能应付 80% 的日常场景。剩下的命令,遇到具体问题再查也来得及。