Git 系统性使用指南

Git 是分布式版本控制系统,用于高效管理项目代码。本文从基础到高级,全方位总结 Git 核心概念、命令与最佳实践。

一、Git 基础

1. 安装与配置

# 安装(以 Ubuntu 为例)
sudo apt install git

# 配置用户信息(全局)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 查看配置
git config --list

2. 初始化仓库

# 新建仓库
git init my-project
cd my-project

# 或克隆现有仓库
git clone https://github.com/username/repository.git

3. 核心概念:工作区、暂存区、版本库

  • 工作区:本地文件目录
  • 暂存区:临时保存待提交的修改(git add 后)
  • 版本库:Git 仓库的核心(.git 目录)

4. 基础操作

(1)查看状态
git status
(2)添加文件到暂存区
# 添加单个文件
git add file.txt

# 添加所有文件
git add .

# 添加指定目录
git add src/
(3)提交到版本库
# 提交暂存区文件
git commit -m "提交说明"

# 跳过暂存区,直接提交工作区已跟踪的文件
git commit -am "提交说明"
(4)查看差异
# 工作区 vs 暂存区
git diff

# 暂存区 vs 版本库
git diff --staged  # 或 git diff --cached

# 工作区 vs 版本库
git diff HEAD
(5)查看提交日志
# 查看完整日志
git log

# 简洁日志(一行显示)
git log --oneline

# 图形化显示分支历史
git log --graph --all --oneline

二、分支管理

1. 分支基础操作

(1)创建分支
git branch dev  # 创建名为 dev 的分支
(2)切换分支
git checkout dev  # 切换到 dev 分支
# 或使用新版命令
git switch dev
(3)创建并切换分支
git checkout -b dev  # 创建 dev 并切换
# 或
git switch -c dev
(4)查看分支
git branch  # 查看本地分支
git branch -a  # 查看所有分支(本地+远程)

2. 合并分支

(1)普通合并
# 切换到目标分支(如 master)
git checkout master

# 合并 dev 分支到 master
git merge dev
(2)解决合并冲突

当合并冲突时,Git 会标记冲突文件。手动编辑文件后:

git add conflict-file.txt  # 标记冲突已解决
git commit -m "解决合并冲突"

3. 删除分支

# 删除已合并的分支
git branch -d dev

# 强制删除未合并的分支
git branch -D dev

三、远程仓库操作

1. 关联远程仓库

# 查看远程仓库
git remote -v

# 添加远程仓库(origin 为默认名称)
git remote add origin https://github.com/username/repo.git

# 修改远程仓库 URL
git remote set-url origin https://github.com/username/new-repo.git

2. 推送与拉取

(1)推送本地分支到远程
git push origin master  # 推送 master 分支
git push -u origin master  # 首次推送并关联(后续可直接 git push)
(2)拉取远程更新
# 抓取远程更新但不合并
git fetch origin

# 拉取并合并(fetch + merge)
git pull origin master

3. 远程分支管理

# 查看远程分支
git branch -r

# 删除远程分支
git push origin --delete dev

四、撤销与回退

1. 撤销工作区修改

git checkout -- file.txt  # 丢弃工作区修改(恢复到暂存区状态)
# 或新版命令
git restore file.txt

2. 撤销暂存区修改

git reset HEAD file.txt  # 从暂存区移除(保留工作区修改)
# 或新版命令
git restore --staged file.txt

3. 撤销提交(git reset)

git reset 有三种模式,通过 --soft/--mixed/--hard 区分:

模式 作用
--soft 仅撤销提交,修改保留在暂存区
--mixed 默认模式,撤销提交和暂存区,修改保留在工作区
--hard 彻底撤销,丢弃所有修改(慎用!)
# 示例:撤销最近 1 次提交
git reset --soft HEAD~1   # 保留修改在暂存区
git reset --mixed HEAD~1  # 保留修改在工作区(默认)
git reset --hard HEAD~1   # 彻底丢弃修改

4. 反转提交(git revert)

创建新提交来撤销历史提交(不修改历史,适合公共分支):

git revert HEAD  # 撤销最近一次提交
git revert commit-hash  # 撤销指定提交

5. 查看操作历史(git reflog)

记录所有 HEAD 移动(可用于恢复误删的提交):

git reflog  # 查看操作历史
git reset --hard HEAD@{n}  # 恢复到指定操作

五、标签管理

1. 创建标签

# 轻量标签(仅指向提交)
git tag v1.0

# 附注标签(包含标签信息)
git tag -a v1.0 -m "版本 1.0 发布"

2. 查看标签

git tag  # 查看所有标签
git show v1.0  # 查看标签详情

3. 推送标签到远程

git push origin v1.0  # 推送单个标签
git push origin --tags  # 推送所有标签

4. 删除标签

# 删除本地标签
git tag -d v1.0

# 删除远程标签
git push origin --delete v1.0

六、高级操作

1. 暂存工作区(git stash)

临时保存未完成的修改(用于切换分支前):

# 暂存工作区
git stash save "临时保存的修改"

# 查看暂存列表
git stash list

# 应用暂存(不删除)
git stash apply stash@{0}

# 应用并删除暂存
git stash pop

# 删除暂存
git stash drop stash@{0}

2. 选择性合并提交(git cherry-pick)

将某个分支的特定提交合并到当前分支:

git cherry-pick commit-hash

3. 变基(git rebase)

将当前分支的提交“移动”到目标分支的最新提交之上(使历史更清晰):

# 在 dev 分支上,将 dev 的提交基于 master 最新
git checkout dev
git rebase master

⚠️ 注意:不要对公共分支使用 rebase(会修改历史)!

4. 二分查找 Bug(git bisect)

通过二分法快速定位引入 Bug 的提交:

git bisect start  # 开始查找
git bisect bad    # 标记当前提交为有 Bug
git bisect good v1.0  # 标记 v1.0 为正常
# Git 自动切换到中间提交,测试后标记 good/bad,直到找到 Bug 提交
git bisect reset  # 退出查找

5. 查看文件修改历史(git blame)

逐行查看文件的修改者和时间:

git blame file.txt

6. 子模块(git submodule)

在一个 Git 仓库中嵌套另一个仓库:

# 添加子模块
git submodule add https://github.com/username/submodule.git path/to/submodule

# 克隆包含子模块的仓库
git clone --recursive https://github.com/username/repo.git

# 更新子模块
git submodule update --init --recursive

7. Git 别名配置

简化常用命令:

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

七、最佳实践

  1. 提交粒度:每次提交聚焦一个功能/修复,避免大而全的提交。
  2. 提交说明:使用清晰的描述(如 fix: 修复登录接口超时)。
  3. 分支策略:采用 Git Flow 或 GitHub Flow 等分支管理模型。
  4. 避免强制推送:除非是个人分支,否则不要使用 git push --force

八、更多资源

  • Git 官方文档:https://git-scm.com/doc
  • Pro Git(在线书籍):https://git-scm.com/book/zh/v2
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐