mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
1154 字
3 分钟
Linux操作大全(十一):Git版本控制完全指南
2026-05-26

Linux操作大全(十一):Git版本控制完全指南#

本篇是Linux操作大全的第十一篇,专门讲解Git版本控制系统的使用。


📚 目录#

  1. Git简介与安装
  2. Git基础配置
  3. 创建仓库
  4. 基本工作流程
  5. 分支管理
  6. 远程仓库操作
  7. 标签管理
  8. 查看历史与差异
  9. 撤销与回退
  10. Git高级技巧
  11. 常见问题与解决方案
  12. Git命令速查表

1. Git简介与安装#

1.1 什么是Git?#

Git是一个分布式版本控制系统,用于跟踪文件的变化,协调多人协作开发。

核心特点:

  • 分布式:每个开发者都有完整的仓库副本
  • 快照式:每次提交都是项目的完整快照
  • 分支轻量:创建和切换分支几乎瞬间完成
  • 数据完整:使用SHA-1哈希保证数据完整性

1.2 安装Git#

Ubuntu/Debian:

sudo apt update
sudo apt install git

CentOS/RHEL:

sudo yum install git

macOS:

# 使用Homebrew
brew install git

验证安装:

git --version
# 输出示例:git version 2.39.2

2. Git基础配置#

2.1 用户信息配置#

设置用户名和邮箱(必须配置):

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

2.2 配置级别#

Git配置分为三个级别:

级别命令参数配置文件位置作用范围
系统级--system/etc/gitconfig所有用户
全局级--global~/.gitconfig当前用户
仓库级--local.git/config当前仓库

示例:

# 全局配置(推荐)
git config --global user.name "Emilia"
# 仓库级配置(覆盖全局)
git config --local user.name "Project Name"

2.3 常用配置项#

# 设置默认编辑器
git config --global core.editor vim
# 设置默认分支名
git config --global init.defaultBranch main
# 启用颜色输出
git config --global color.ui auto
# 设置换行符处理(Windows用户)
git config --global core.autocrlf true
# 设置换行符处理(Linux/Mac用户)
git config --global core.autocrlf input
# 设置pull时使用rebase
git config --global pull.rebase true
# 设置推送时推送当前分支
git config --global push.default current

3. 创建仓库#

3.1 初始化新仓库#

# 创建项目目录并初始化
mkdir my-project
cd my-project
git init
# 或者在当前目录初始化
git init

初始化后会创建 .git 目录,包含所有版本控制信息。

3.2 克隆远程仓库#

# HTTPS克隆
git clone https://github.com/user/repo.git
# SSH克隆(推荐)
git clone git@github.com:user/repo.git
# 克隆到指定目录
git clone https://github.com/user/repo.git my-folder
# 克隆特定分支
git clone -b develop https://github.com/user/repo.git
# 浅克隆(只克隆最近一次提交)
git clone --depth 1 https://github.com/user/repo.git

3.3 仓库结构#

Git仓库包含三个主要区域:

工作区 (Working Directory)
↓ git add
暂存区 (Staging Area / Index)
↓ git commit
本地仓库 (Local Repository)
↓ git push
远程仓库 (Remote Repository)

4. 基本工作流程#

4.1 查看状态#

# 查看工作区状态
git status
# 简洁模式
git status -s
git status --short
# 输出示例:
# M file.txt # 已修改(未暂存)
# A new.txt # 新添加(已暂存)
# ?? other.txt # 未跟踪

4.2 添加到暂存区#

# 添加单个文件
git add file.txt
# 添加多个文件
git add file1.txt file2.txt
# 添加所有修改和新文件
git add .
# 添加所有文件(包括删除)
git add -A
# 交互式添加
git add -p
# 然后选择要添加的代码块

4.3 提交更改#

# 提交并添加消息
git commit -m "feat: 添加新功能"
# 添加消息的详细描述
git commit -m "feat: 添加用户登录功能" -m "包含密码加密和记住登录状态"
# 自动暂存已跟踪文件的修改并提交
git commit -am "fix: 修复bug"
# 修改最后一次提交
git commit --amend
# 修改最后一次提交的消息
git commit --amend -m "新的提交消息"

4.4 提交消息规范#

推荐使用约定式提交(Conventional Commits):

<类型>(<范围>): <描述>
[可选正文]
[可选脚注]

常用类型:

  • feat: 新功能
  • fix: 修复bug
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 重构
  • perf: 性能优化
  • test: 测试相关
  • chore: 构建/工具相关

示例:

feat(auth): 添加用户登录功能
- 实现密码加密存储
- 添加记住登录状态选项
- 优化错误提示信息
Closes #123

5. 分支管理#

5.1 分支基础#

# 查看本地分支
git branch
# 查看所有分支(包括远程)
git branch -a
# 查看分支最后提交
git branch -v
# 创建新分支
git branch feature-login
# 切换分支
git checkout feature-login
# 创建并切换到新分支(推荐)
git checkout -b feature-login
# 或使用新命令(Git 2.23+)
git switch feature-login
git switch -c feature-login

5.2 分支操作#

# 重命名分支
git branch -m old-name new-name
# 重命名当前分支
git branch -m new-name
# 删除本地分支
git branch -d feature-login
# 强制删除未合并的分支
git branch -D feature-login
# 删除远程分支
git push origin --delete feature-login
# 设置上游分支
git branch --set-upstream-to=origin/main main

5.3 分支策略#

Git Flow 模型:

main (生产分支)
├── develop (开发分支)
│ │
│ ├── feature/* (功能分支)
│ ├── release/* (发布分支)
│ └── hotfix/* (热修复分支)
└── v1.0, v2.0 (标签)

GitHub Flow 模型(推荐):

main (主分支,始终可部署)
└── feature-* (功能分支,合并后删除)

5.4 合并分支#

# 合并分支到当前分支
git merge feature-login
# 合并并创建合并提交
git merge --no-ff feature-login
# 中止合并(出现冲突时)
git merge --abort

5.5 变基#

# 将当前分支变基到目标分支
git rebase main
# 交互式变基(整理提交历史)
git rebase -i HEAD~3
# 在编辑器中选择操作:pick, squash, reword, edit, drop
# 继续变基(解决冲突后)
git rebase --continue
# 中止变基
git rebase --abort

变基 vs 合并:

  • 变基:创建线性历史,更清晰
  • 合并:保留完整历史,更安全

6. 远程仓库操作#

6.1 远程仓库管理#

# 查看远程仓库
git remote
# 查看远程仓库详细信息
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 修改远程仓库URL
git remote set-url origin https://github.com/user/new-repo.git
# 删除远程仓库
git remote remove origin
# 重命名远程仓库
git remote rename origin upstream

6.2 推送与拉取#

# 推送到远程
git push origin main
# 推送并设置上游分支
git push -u origin main
# 推送所有分支
git push --all origin
# 推送标签
git push origin tag v1.0.0
# 推送所有标签
git push origin --tags
# 拉取远程更新
git pull origin main
# 拉取并变基
git pull --rebase origin main
# 获取远程更新(不合并)
git fetch origin
# 获取所有远程更新
git fetch --all

6.3 多远程仓库#

# 添加多个远程仓库
git remote add origin https://github.com/user/repo.git
git remote add upstream https://github.com/original/repo.git
# 从上游拉取更新
git fetch upstream
# 合并上游更改
git merge upstream/main
# 推送到不同远程
git push origin main
git push upstream main

7. 标签管理#

7.1 标签类型#

轻量标签(Lightweight Tag):

git tag v1.0.0

附注标签(Annotated Tag):

git tag -a v1.0.0 -m "版本 1.0.0 发布"

7.2 标签操作#

# 查看所有标签
git tag
# 查看特定标签信息
git show v1.0.0
# 创建标签
git tag v1.0.0
# 创建附注标签
git tag -a v1.0.0 -m "Release v1.0.0"
# 给特定提交打标签
git tag -a v1.0.0 abc1234 -m "Release v1.0.0"
# 推送标签到远程
git push origin v1.0.0
# 推送所有标签
git push origin --tags
# 删除本地标签
git tag -d v1.0.0
# 删除远程标签
git push origin --delete v1.0.0

8. 查看历史与差异#

8.1 查看提交历史#

# 基本日志
git log
# 单行显示
git log --oneline
# 图形化显示
git log --graph --oneline --all
# 显示最近n次提交
git log -5
# 显示特定文件的历史
git log file.txt
# 显示某个作者的提交
git log --author="Emilia"
# 显示特定日期范围的提交
git log --after="2026-01-01" --before="2026-05-26"
# 显示提交的详细变更
git log -p
# 显示统计信息
git log --stat

8.2 查看差异#

# 工作区与暂存区的差异
git diff
# 暂存区与最新提交的差异
git diff --staged
git diff --cached
# 两个提交之间的差异
git diff commit1 commit2
# 两个分支之间的差异
git diff main feature
# 显示特定文件的差异
git diff file.txt
# 显示统计信息
git diff --stat

8.3 搜索#

# 搜索代码内容
git grep "function name"
# 搜索特定提交中的代码
git grep "function" v1.0.0
# 搜索引入特定字符串的提交
git log -S "function_name"
# 搜索正则表达式
git grep -E "func.*name"

9. 撤销与回退#

9.1 撤销工作区修改#

# 撤销单个文件的修改
git checkout -- file.txt
# 撤销所有修改
git checkout -- .
# 使用新命令(Git 2.23+)
git restore file.txt
git restore .

9.2 取消暂存#

# 取消暂存文件
git reset HEAD file.txt
# 使用新命令
git restore --staged file.txt

9.3 回退提交#

# 回退到指定提交,保留修改在暂存区
git reset --soft HEAD~1
# 回退到指定提交,保留修改在工作区
git reset --mixed HEAD~1
# 回退到指定提交,丢弃所有修改
git reset --hard HEAD~1
# 回退到特定提交
git reset --hard abc1234

9.4 安全回退#

# 创建新提交来撤销指定提交
git revert HEAD
# 撤销指定提交
git revert abc1234
# 撤销多个提交
git revert HEAD~3..HEAD
# 不自动提交,只暂存
git revert --no-commit HEAD

9.5 恢复删除的提交#

# 查看操作历史
git reflog
# 恢复到指定操作
git reset --hard HEAD@{2}
# 恢复删除的分支
git checkout -b recovered-branch HEAD@{5}

10. Git高级技巧#

10.1 暂存工作#

# 暂存当前修改
git stash
# 暂存并添加描述
git stash push -m "正在开发的功能"
# 暂存特定文件
git stash push file.txt
# 查看暂存列表
git stash list
# 恢复最近的暂存
git stash pop
# 恢复但不删除暂存
git stash apply
# 恢复特定暂存
git stash apply stash@{2}
# 删除暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear

10.2 Cherry-pick#

# 选择特定提交应用到当前分支
git cherry-pick abc1234
# 选择多个提交
git cherry-pick commit1 commit2
# 选择提交范围
git cherry-pick commit1..commit5
# 不自动提交
git cherry-pick --no-commit abc1234

10.3 子模块#

# 添加子模块
git submodule add https://github.com/user/repo.git path/to/submodule
# 初始化子模块
git submodule init
# 更新子模块
git submodule update
# 克隆包含子模块的仓库
git clone --recursive https://github.com/user/repo.git
# 或者克隆后初始化
git clone https://github.com/user/repo.git
git submodule init
git submodule update

10.4 Git钩子#

Git钩子位于 .git/hooks/ 目录,常用钩子:

钩子名触发时机常见用途
pre-commit提交前代码检查、测试
commit-msg提交时验证提交消息格式
pre-push推送前运行测试
post-merge合并后安装依赖

示例:pre-commit钩子

.git/hooks/pre-commit
#!/bin/bash
# 运行代码检查
npm run lint
# 如果检查失败,阻止提交
if [ $? -ne 0 ]; then
echo "代码检查失败,请修复后再提交"
exit 1
fi

10.5 大文件处理#

# 安装Git LFS
git lfs install
# 跟踪大文件类型
git lfs track "*.psd"
git lfs track "*.zip"
# 查看跟踪的文件类型
git lfs ls-files
# 提交.gitattributes
git add .gitattributes
git commit -m "chore: 添加LFS跟踪规则"

11. 常见问题与解决方案#

11.1 合并冲突#

解决步骤:

  1. 执行合并/变基
  2. 查看冲突文件:git status
  3. 编辑冲突文件,解决冲突标记
  4. 添加解决后的文件:git add file.txt
  5. 完成合并:git commitgit rebase --continue

冲突标记:

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

11.2 误删文件恢复#

# 恢复删除的文件
git checkout HEAD -- file.txt
# 或者
git restore --source=HEAD file.txt

11.3 修改历史提交#

# 交互式变基(修改最近3次提交)
git rebase -i HEAD~3
# 修改作者信息
git commit --amend --author="Name <email>"
# 修改全局历史(谨慎使用)
git filter-branch --env-filter '
if [ "$GIT_AUTHOR_EMAIL" = "old@email.com" ]; then
export GIT_AUTHOR_EMAIL="new@email.com"
fi
' --tag-name-filter cat -- --all

11.4 清理仓库#

# 查看要删除的文件
git clean -n
# 删除未跟踪的文件
git clean -f
# 删除未跟踪的目录
git clean -fd
# 删除未跟踪和忽略的文件
git clean -fx

12. Git命令速查表#

12.1 基础命令#

命令说明
git init初始化新仓库
git clone <url>克隆远程仓库
git add <file>添加文件到暂存区
git commit -m "msg"提交更改
git status查看状态
git diff查看差异
git log查看历史

12.2 分支命令#

命令说明
git branch列出分支
git branch <name>创建分支
git checkout <branch>切换分支
git checkout -b <branch>创建并切换分支
git merge <branch>合并分支
git branch -d <branch>删除分支

12.3 远程命令#

命令说明
git remote add <name> <url>添加远程仓库
git push <remote> <branch>推送到远程
git pull <remote> <branch>拉取远程更新
git fetch <remote>获取远程更新

12.4 撤销命令#

命令说明
git checkout -- <file>撤销工作区修改
git reset HEAD <file>取消暂存
git reset --soft HEAD~1回退提交(保留修改)
git reset --hard HEAD~1回退提交(丢弃修改)
git revert <commit>安全回退

12.5 高级命令#

命令说明
git stash暂存工作
git cherry-pick <commit>选择提交
git rebase <branch>变基
git tag <name>创建标签
git reflog查看操作历史

📖 实用配置推荐#

全局配置模板#

~/.gitconfig
[user]
name = Your Name
email = your.email@example.com
[core]
editor = vim
autocrlf = input
[alias]
st = status
co = checkout
br = branch
ci = commit
lg = log --graph --oneline --all
last = log -1 HEAD
unstage = reset HEAD --
[pull]
rebase = true
[push]
default = current
[color]
ui = auto

常用别名设置#

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 config --global alias.lg "log --graph --oneline --all"
git config --global alias.last "log -1 HEAD"
git config --global alias.unstage "reset HEAD --"

🔗 相关资源#


📚 下一篇预告Linux操作大全(十二):Shell脚本编程进阶

🔙 返回Linux操作大全目录

📖 配套速查Linux命令速查手册

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Linux操作大全(十一):Git版本控制完全指南
https://emilia520.icu/posts/linux-manual-11-git/
作者
火花花
发布于
2026-05-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录