1154 字
3 分钟
Linux操作大全(十一):Git版本控制完全指南
Linux操作大全(十一):Git版本控制完全指南
本篇是Linux操作大全的第十一篇,专门讲解Git版本控制系统的使用。
📚 目录
1. Git简介与安装
1.1 什么是Git?
Git是一个分布式版本控制系统,用于跟踪文件的变化,协调多人协作开发。
核心特点:
- 分布式:每个开发者都有完整的仓库副本
- 快照式:每次提交都是项目的完整快照
- 分支轻量:创建和切换分支几乎瞬间完成
- 数据完整:使用SHA-1哈希保证数据完整性
1.2 安装Git
Ubuntu/Debian:
sudo apt updatesudo apt install gitCentOS/RHEL:
sudo yum install gitmacOS:
# 使用Homebrewbrew install git验证安装:
git --version# 输出示例:git version 2.39.22. Git基础配置
2.1 用户信息配置
设置用户名和邮箱(必须配置):
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"查看配置:
git config --listgit config user.namegit config user.email2.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时使用rebasegit config --global pull.rebase true
# 设置推送时推送当前分支git config --global push.default current3. 创建仓库
3.1 初始化新仓库
# 创建项目目录并初始化mkdir my-projectcd my-projectgit 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.git3.3 仓库结构
Git仓库包含三个主要区域:
工作区 (Working Directory) ↓ git add暂存区 (Staging Area / Index) ↓ git commit本地仓库 (Local Repository) ↓ git push远程仓库 (Remote Repository)4. 基本工作流程
4.1 查看状态
# 查看工作区状态git status
# 简洁模式git status -sgit 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: 修复bugdocs: 文档更新style: 代码格式调整refactor: 重构perf: 性能优化test: 测试相关chore: 构建/工具相关
示例:
feat(auth): 添加用户登录功能
- 实现密码加密存储- 添加记住登录状态选项- 优化错误提示信息
Closes #1235. 分支管理
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-logingit switch -c feature-login5.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 main5.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 --abort5.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
# 修改远程仓库URLgit remote set-url origin https://github.com/user/new-repo.git
# 删除远程仓库git remote remove origin
# 重命名远程仓库git remote rename origin upstream6.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 --all6.3 多远程仓库
# 添加多个远程仓库git remote add origin https://github.com/user/repo.gitgit remote add upstream https://github.com/original/repo.git
# 从上游拉取更新git fetch upstream
# 合并上游更改git merge upstream/main
# 推送到不同远程git push origin maingit push upstream main7. 标签管理
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.08. 查看历史与差异
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 --stat8.2 查看差异
# 工作区与暂存区的差异git diff
# 暂存区与最新提交的差异git diff --stagedgit diff --cached
# 两个提交之间的差异git diff commit1 commit2
# 两个分支之间的差异git diff main feature
# 显示特定文件的差异git diff file.txt
# 显示统计信息git diff --stat8.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.txtgit restore .9.2 取消暂存
# 取消暂存文件git reset HEAD file.txt
# 使用新命令git restore --staged file.txt9.3 回退提交
# 回退到指定提交,保留修改在暂存区git reset --soft HEAD~1
# 回退到指定提交,保留修改在工作区git reset --mixed HEAD~1
# 回退到指定提交,丢弃所有修改git reset --hard HEAD~1
# 回退到特定提交git reset --hard abc12349.4 安全回退
# 创建新提交来撤销指定提交git revert HEAD
# 撤销指定提交git revert abc1234
# 撤销多个提交git revert HEAD~3..HEAD
# 不自动提交,只暂存git revert --no-commit HEAD9.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 clear10.2 Cherry-pick
# 选择特定提交应用到当前分支git cherry-pick abc1234
# 选择多个提交git cherry-pick commit1 commit2
# 选择提交范围git cherry-pick commit1..commit5
# 不自动提交git cherry-pick --no-commit abc123410.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.gitgit submodule initgit submodule update10.4 Git钩子
Git钩子位于 .git/hooks/ 目录,常用钩子:
| 钩子名 | 触发时机 | 常见用途 |
|---|---|---|
pre-commit | 提交前 | 代码检查、测试 |
commit-msg | 提交时 | 验证提交消息格式 |
pre-push | 推送前 | 运行测试 |
post-merge | 合并后 | 安装依赖 |
示例:pre-commit钩子
#!/bin/bash# 运行代码检查npm run lint
# 如果检查失败,阻止提交if [ $? -ne 0 ]; then echo "代码检查失败,请修复后再提交" exit 1fi10.5 大文件处理
# 安装Git LFSgit lfs install
# 跟踪大文件类型git lfs track "*.psd"git lfs track "*.zip"
# 查看跟踪的文件类型git lfs ls-files
# 提交.gitattributesgit add .gitattributesgit commit -m "chore: 添加LFS跟踪规则"11. 常见问题与解决方案
11.1 合并冲突
解决步骤:
- 执行合并/变基
- 查看冲突文件:
git status - 编辑冲突文件,解决冲突标记
- 添加解决后的文件:
git add file.txt - 完成合并:
git commit或git rebase --continue
冲突标记:
<<<<<<< HEAD当前分支的内容=======要合并的分支的内容>>>>>>> feature-branch11.2 误删文件恢复
# 恢复删除的文件git checkout HEAD -- file.txt
# 或者git restore --source=HEAD file.txt11.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 -- --all11.4 清理仓库
# 查看要删除的文件git clean -n
# 删除未跟踪的文件git clean -f
# 删除未跟踪的目录git clean -fd
# 删除未跟踪和忽略的文件git clean -fx12. 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 | 查看操作历史 |
📖 实用配置推荐
全局配置模板
[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 statusgit config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit 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/ 部分信息可能已经过时
相关文章 智能推荐
1
Linux操作大全(一):基础入门完全指南
Linux常见操作 从零开始认识Linux,了解什么是Linux、主流发行版对比、安装方法、桌面环境选择,适合纯小白的入门教程
2
Linux操作大全(二):文件与目录操作详解
Linux常见操作 详细讲解Linux文件和目录的各种操作,包括创建、复制、移动、删除、查找、压缩等,每个命令都有实际示例
3
Linux操作大全(三):用户与权限管理详解
Linux常见操作 深入讲解Linux用户管理、组管理、sudo权限、PAM认证等知识,让你彻底搞懂Linux的权限体系
4
Linux操作大全(四):软件包管理详解
Linux常见操作 全面讲解Linux软件包管理,包括apt、yum、dnf、snap、源码编译安装等,让你轻松管理Linux上的软件
5
Linux操作大全(九):系统监控与性能优化详解
Linux常见操作 全面讲解Linux系统监控工具、性能指标、优化技巧等知识,让你轻松掌控系统性能








