Skip to main content

Git版本控制系统

概述

Git是目前世界上最先进的分布式版本控制系统,由Linux创始人Linus Torvalds开发,用于Linux内核开发的版本管理。Git的设计思想是分布式和快照存储,而非差异比较。

核心特点

  • 分布式存储: 每个开发者都拥有完整代码仓库
  • 快照存储: 保存完整项目状态而非差异
  • 分支操作: 轻量、快速的分支切换与合并

基本概念

Git工作区域

Git有三个主要工作区域,文件在其中流转:

  1. 工作目录(Working Directory):实际文件所在的目录,可直接编辑修改
  2. 暂存区(Staging Area/Index):临时存储修改,准备提交到仓库
  3. 本地仓库(Repository):保存项目的所有版本历史

工作流程:

  • git add 将修改从工作目录添加到暂存区
  • git commit 将暂存区的修改提交到本地仓库

Git文件状态

Git中的文件可能处于以下四种状态:

状态描述命令操作
未跟踪 (Untracked)新创建的文件,Git未记录其变化git add 文件名 开始跟踪
已修改 (Modified)跟踪文件的内容发生变化git add 文件名 暂存修改
已暂存 (Staged)修改已添加到暂存区,准备提交git commit 提交到仓库
已提交 (Committed)修改已安全存储在本地仓库git push 推送到远程仓库

基本命令

初始化与配置

# 初始化新仓库
git init

# 配置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 克隆远程仓库
git clone https://github.com/username/repository.git

基本工作流

# 查看文件状态
git status

# 添加文件到暂存区
git add filename # 添加指定文件
git add . # 添加所有修改

# 提交到本地仓库
git commit -m "提交说明"

# 查看提交历史
git log
git log --oneline # 简洁模式

分支操作

# 创建新分支
git branch branch-name

# 切换分支
git checkout branch-name
git switch branch-name # Git 2.23+ 新命令

# 创建并切换到新分支
git checkout -b branch-name
git switch -c branch-name # Git 2.23+ 新命令

# 合并分支
git merge branch-name

# 删除分支
git branch -d branch-name # 安全删除(已合并的分支)
git branch -D branch-name # 强制删除

远程仓库操作

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

# 推送到远程仓库
git push -u origin branch-name # 首次推送并设置上游分支
git push # 后续推送

# 拉取远程更新
git fetch # 仅下载更新
git pull # 下载并合并更新

Git工作流模型

集中式工作流

所有开发者直接在主分支上工作,适合小型团队和简单项目。

Git Flow工作流

分支类型用途命名约定
master产品发布分支,只包含稳定版本master
develop开发分支,包含最新开发代码develop
feature用于开发新功能feature/功能名称
release版本发布准备release/版本号
hotfix紧急bug修复hotfix/bug描述

GitHub Flow工作流

一种简化的工作流,适合持续部署的项目:

  1. 创建分支:从master分支创建功能分支
  2. 添加提交:在功能分支上开发并提交
  3. 提交PR:创建Pull Request请求合并
  4. 讨论审查:团队成员审查代码并讨论
  5. 部署测试:在合并前进行部署测试
  6. 合并:确认无问题后合并到master

高级技巧

Git Stash(储藏)

当需要切换分支但又不想提交当前工作时:

# 储藏当前工作
git stash

# 查看储藏列表
git stash list

# 应用最近的储藏
git stash apply

# 应用并删除储藏
git stash pop

# 删除储藏
git stash drop stash@{n}

Git Cherry-pick(挑拣提交)

# 将指定提交应用到当前分支
git cherry-pick <commit-hash>

Git Rebase(变基)

# 变基操作(谨慎使用)
git rebase master # 将当前分支变基到master
git rebase -i HEAD~3 # 交互式变基,合并最近3个提交

常见问题解决

撤销操作

情况命令
撤销工作区修改git checkout -- filename``git restore filename (Git 2.23+)
撤销暂存区修改git reset HEAD filename``git restore --staged filename (Git 2.23+)
修改最近一次提交git commit --amend
撤销已推送的提交git revert commit-hash

解决冲突

当合并或变基操作遇到冲突时:

  1. 查看冲突文件:冲突部分会被标记

    <<<<<<< HEAD
    当前分支代码
    =======
    合入分支代码
    >>>>>>> branch-name
  2. 编辑文件解决冲突:手动修改文件,决定保留哪些内容

  3. 标记为已解决

    git add filename
  4. 继续合并/变基过程

    git merge --continue  # 合并时
    git rebase --continue # 变基时

Git工具与资源

常用GUI工具

  • Sourcetree:免费的Git图形界面工具
  • GitKraken:跨平台Git客户端
  • GitHub Desktop:GitHub官方客户端
  • TortoiseGit:Windows资源管理器集成

学习资源


Git是一个强大而复杂的版本控制系统,掌握其基本概念和常用命令能够显著提高开发效率。随着使用经验的积累,你会逐渐熟悉更多高级功能,使代码管理更加高效。