Git 版本控制教程

版本控制 · Git · 协作开发

简介

Git 是一个分布式版本控制系统,用于追踪文件变化、协调多人协作开发。被广泛应用于软件工程项目中。

Git 核心概念

  • 仓库 (Repository) - 项目的版本数据库
  • 提交 (Commit) - 记录文件快照
  • 分支 (Branch) - 独立的开发线
  • 合并 (Merge) - 合并不同分支

安装 Git

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install git

Linux (CentOS/RHEL)

sudo yum install git

macOS

brew install git

Windows

下载并安装:Git for Windows

验证安装

git --version

Git 配置

设置用户名和邮箱

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

查看配置

git config --list
git config user.name
git config user.email

生成 SSH 密钥

ssh-keygen -t ed25519 -C "your.email@example.com"
cat ~/.ssh/id_ed25519.pub

配置别名

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit

基础操作

初始化仓库

git init
git init my-project

克隆远程仓库

git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git

查看状态

git status

添加文件到暂存区

git add filename.txt
git add .              # 添加所有文件
git add -A             # 添加所有文件(包括删除)
git add -p             # 交互式添加

提交更改

git commit -m "提交信息"
git commit -am "添加并提交"  # 仅适用于已跟踪文件

查看提交历史

git log
git log --oneline      # 简洁模式
git log --graph        # 图形化显示
git log -n 5           # 最近5条

查看差异

git diff              # 工作区 vs 暂存区
git diff --staged      # 暂存区 vs 上次提交
git diff HEAD          # 工作区 vs HEAD

撤销操作

git checkout -- filename     # 撤销工作区修改
git reset HEAD filename      # 取消暂存
git reset --soft HEAD~1      # 保留更改在暂存区
git reset --mixed HEAD~1     # 保留更改在工作区(默认)
git reset --hard HEAD~1      # 删除上次提交(危险)

分支管理

查看分支

git branch              # 本地分支
git branch -r           # 远程分支
git branch -a           # 所有分支

创建分支

git branch feature-login
git checkout -b feature-login   # 创建并切换
git switch -c feature-login     # 同上(现代命令)

切换分支

git checkout feature-login
git switch feature-login

删除分支

git branch -d feature-login   # 安全删除
git branch -D feature-login      # 强制删除

合并分支

git checkout main
git merge feature-login

解决冲突

当合并冲突时,Git 会在文件中标记冲突内容:

<<<<<<< HEAD
当前分支的内容
=======
要合并的分支内容
>>>>>>> feature-login

手动编辑解决冲突后:

git add filename.txt
git commit -m "解决冲突"

储藏更改

git stash                 # 储藏当前更改
git stash list           # 查看储藏列表
git stash pop            # 恢复并删除储藏
git stash apply          # 仅恢复储藏

远程协作

查看远程仓库

git remote -v

添加远程仓库

git remote add origin https://github.com/user/repo.git
git remote add upstream https://github.com/original/repo.git

推送代码

git push origin main
git push -u origin feature-login  # 首次推送并设置上游

拉取代码

git pull origin main
git pull --rebase origin main    # 使用 rebase 模式

获取更新

git fetch origin
git fetch --all

常用工作流

git clone git@github.com:user/repo.git
git checkout -b feature-new
git add .
git commit -m "添加新功能"
git push -u origin feature-new

Git 最佳实践

  • 提交信息要清晰描述做了什么
  • 小而频繁的提交比大而少的提交更好
  • 合并前先 pull 最新代码
  • 使用分支开发新功能
  • 不要提交敏感信息到仓库