Git(Global Information Tracker)作为最流行的分布式版本控制系统,由Linux之父Linus Torvalds于2005年创建,现已成为软件开发的基础设施。与传统集中式版本控制系统(如SVN)相比,Git具有三大核心优势:
无论是个人项目还是大型团队协作,Git都能提供可靠的版本跟踪和协作支持。本指南将从安装配置到高级技巧,全面覆盖Git的使用方法,帮助你从入门到精通。
下载渠道对比:
来源 | 下载速度 | 稳定性 | 推荐指数 |
---|---|---|---|
Git官网 | 较慢 | ⭐⭐⭐⭐ | ⭐⭐ |
清华镜像站 | 快(8MB/s) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
腾讯软件中心 | 极速(15MB/s) | ⭐⭐⭐ | ⭐⭐⭐ |
安装步骤:
Git-2.50.1-64-bit.exe
)D:\Program Files\Git
选择"Git from the command line and also from 3rd-party software"
选择"Checkout Windows-style, commit Unix-style line endings"
验证安装:
打开Git Bash或PowerShell,输入:
git --version
# 预期输出:git version 2.50.1.windows.1
方法一:Homebrew安装(推荐)
# 安装Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装Git
brew install git
# 验证安装
git --version
方法二:官方安装包
.dmg
安装包Debian/Ubuntu:
sudo apt update && sudo apt install git-all -y
Fedora/RHEL:
sudo dnf install git-all -y
Arch Linux:
sudo pacman -S git
源码编译安装(获取最新版本):
# 安装依赖
sudo apt install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev asciidoc xmlto docbook2x
# 下载源码
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.50.1.tar.gz
tar -zxf git-2.50.1.tar.gz
cd git-2.50.1
# 编译安装
make configure
./configure --prefix=/usr
make all doc info
sudo make install install-doc install-html install-info
# 设置全局用户名和邮箱(重要!将出现在所有提交记录中)
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
# 查看配置信息
git config --list
# 预期输出包含:
# user.name=Your Name
# [email protected]
# 设置默认分支名为main(替代传统master)
git config --global init.defaultBranch main
# 配置中文支持(解决中文文件名显示问题)
git config --global core.quotepath false
# 配置行尾符自动转换(跨平台协作必备)
git config --global core.autocrlf true # Windows用户
# git config --global core.autocrlf input # Mac/Linux用户
# 配置 credential helper(记住密码,避免重复输入)
git config --global credential.helper store
SSH密钥可实现免密码访问Git远程仓库,步骤如下:
# 生成SSH密钥(一路回车默认即可)
ssh-keygen -t ed25519 -C "[email protected]"
# 查看公钥内容
cat ~/.ssh/id_ed25519.pub
# 复制输出的公钥文本
# 添加到GitHub/GitLab
# 1. 登录GitHub -> 点击头像 -> Settings -> SSH and GPG keys
# 2. 点击"New SSH key",粘贴公钥并保存
# 测试连接
ssh -T [email protected]
# 成功提示:Hi username! You've successfully authenticated...
Git工作区结构可类比为"绘画创作"过程:
工作区(Working Directory) → 暂存区(Staging Area) → 本地仓库(Local Repository) → 远程仓库(Remote Repository)
(画布上的画作) (调色板上准备好的颜料) (已完成的画作存档) (画廊展览)
.git/index
文件中.git
目录中# 初始化新仓库
mkdir my-project && cd my-project
git init
# 生成.git目录,包含仓库所有元数据
# 克隆远程仓库
git clone https://github.com/username/repo.git
# 或使用SSH(推荐)
git clone [email protected]:username/repo.git
# 查看文件状态
git status
# 输出说明:
# ?? : 未跟踪(Untracked)
# M : 已修改(Modified)
# A : 已暂存(Staged)
# 添加文件到暂存区
git add filename.txt # 添加单个文件
git add directory/ # 添加整个目录
git add . # 添加所有修改(谨慎使用)
git add -p # 交互式添加部分修改
# 提交暂存区文件到本地仓库
git commit -m "feat: add user login function"
# 提交信息规范:类型(范围): 描述
# 查看提交历史
git log # 详细历史
git log --oneline # 简洁历史
git log --graph --decorate # 图形化展示分支关系
# 添加远程仓库
git remote add origin [email protected]:username/repo.git
# 查看远程仓库
git remote -v
# 输出示例:
# origin [email protected]:username/repo.git (fetch)
# origin [email protected]:username/repo.git (push)
# 拉取远程更新
git pull origin main # 拉取并合并远程main分支
# 推送本地提交
git push origin main # 推送本地main分支到远程
git push -u origin main # 首次推送时设置上游跟踪
# 查看分支
git branch # 查看本地分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支
# 创建分支
git branch feature/login # 创建feature/login分支
git checkout -b feature/payment # 创建并切换到feature/payment分支
# 切换分支
git checkout main # 切换到main分支
# Git 2.23+新命令:
git switch feature/login # 更直观的切换命令
# 合并分支
git checkout main
git merge feature/login # 将feature/login合并到main
# 删除分支
git branch -d feature/login # 删除已合并分支
git branch -D feature/login # 强制删除未合并分支
main(稳定) ← feature分支(开发)
↑
开发者
工作流程:
main(生产版本) ← release分支(发布准备) ← develop分支(开发主分支) ← feature分支
↑ ↑
└──────────────── hotfix分支(紧急修复) ───┘
分支命名规范:
feature/xxx
:新功能开发bugfix/xxx
:缺陷修复hotfix/xxx
:生产环境紧急修复release/x.y.z
:版本发布准备当多人修改同一文件的同一部分时,会产生合并冲突:
# 冲突提示
Auto-merging src/app.js
CONFLICT (content): Merge conflict in src/app.js
Automatic merge failed; fix conflicts and then commit the result.
解决步骤:
查看冲突文件:
git status
# 标记为"both modified"的文件即冲突文件
编辑冲突文件:
打开冲突文件,查找冲突标记:
<<<<<<< HEAD (当前分支内容)
console.log("Hello, World!");
======= (分隔线)
console.log("Welcome, Git!");
>>>>>>> feature/greeting (待合并分支内容)
手动编辑保留正确内容,删除冲突标记:
console.log("Welcome, Git!"); // 保留新功能版本
标记为已解决并提交:
git add src/app.js
git commit -m "resolve merge conflict in app.js"
冲突预防建议:
git pull --rebase
保持提交历史整洁<类型>[可选范围]: <描述>
[可选正文]
[可选脚注]
类型说明:
feat
: 新功能fix
: 缺陷修复docs
: 文档更新style
: 代码格式调整refactor
: 代码重构test
: 添加测试chore
: 构建/依赖管理示例:
git commit -m "feat(auth): implement JWT authentication
- Add token generation on login
- Implement token validation middleware
- Add expiration check
Closes #42"
# 撤销最近一次提交,保留修改(推荐)
git reset --soft HEAD~1
# 彻底删除最近一次提交(危险!)
git reset --hard HEAD~1
# 修改最近一次提交
git commit --amend
# 修改提交信息而不修改内容
git commit --amend --no-edit
# 交互式变基(整理多个提交)
git rebase -i HEAD~3 # 整理最近3个提交
# 在编辑器中修改提交类型(pick/edit/reword/squash)
# 暂存当前修改
git stash save "WIP: user profile page"
# 查看所有暂存
git stash list
# 应用最近一次暂存
git stash apply
# 应用并删除暂存
git stash pop stash@{0}
# 清除所有暂存
git stash clear
# 挑选特定提交应用到当前分支
git cherry-pick a1b2c3d
# 解决冲突后继续
git cherry-pick --continue
# 放弃挑选
git cherry-pick --abort
创建.gitignore
文件,指定不需要跟踪的文件:
# 基本配置示例
# 依赖目录
node_modules/
vendor/
# 构建产物
dist/
build/
# 环境变量
.env
.env.local
# 日志文件
logs/
*.log
# 编辑器配置
.idea/
.vscode/
*.swp
*.swo
注意:.gitignore
只对未跟踪文件有效,已跟踪文件需先移除跟踪:
git rm --cached filename
Git LFS(Large File Storage)用于管理超过100MB的大文件:
# 安装Git LFS
git lfs install
# 跟踪大文件类型
git lfs track "*.psd"
git lfs track "*.zip"
git lfs track "*.iso"
# 提交.gitattributes
git add .gitattributes
# 正常添加提交大文件
git add large-file.psd
git commit -m "feat: add design resources"
git push origin main
# 查看操作日志
git reflog
# 输出示例:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~1
# d4e5f6g HEAD@{1}: commit: feat: add payment module
# 恢复指定提交
git checkout d4e5f6g
# 基于恢复的提交创建新分支
git checkout -b recovered-branch
# 创建恢复提交(推荐)
git revert a1b2c3d
git push origin main
# 危险操作:强制覆盖远程(仅限个人分支)
git reset --hard HEAD~1
git push -f origin feature/your-branch
# 原因:远程有本地没有的提交
# 解决方案1:先拉取再推送
git pull --rebase origin main
git push origin main
# 解决方案2:强制推送(仅限个人分支!)
git push -f origin feature/your-branch
# 查看当前远程地址
git remote -v
# 修改远程地址
git remote set-url origin [email protected]:newusername/repo.git
# 添加多个远程仓库
git remote add upstream [email protected]:original/repo.git
# 安装git-filter-repo(推荐替代git-filter-branch)
pip install git-filter-repo
# 查找大文件
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '/^blob/ {if ($3 > 100000000) print $4}'
# 移除大文件
git filter-repo --path large-file.zip --invert-paths --force
# 清理并推送
git gc --aggressive --prune=now
git push origin main --force
# 清理无用对象
git gc
# 优化仓库性能(大型仓库)
git repack -a -d -F
Git 2.48.0+新特性:
git switch
/git restore
:更直观的分支切换和工作区恢复命令git sparse-checkout
:稀疏检出,只拉取需要的文件安全更新:
Git 2.50.1修复了多个安全漏洞(CVE-2025-27613、CVE-2025-46334等),建议所有用户升级:
# Windows升级
# 下载最新安装包覆盖安装
# macOS升级
brew upgrade git
# Linux升级
sudo apt upgrade git
Git作为现代软件开发的基础设施,其价值不仅在于版本控制,更在于它塑造了协作方式和开发流程。掌握Git不仅能提高个人开发效率,更能让你无缝融入专业开发团队。
本指南涵盖了从安装配置到高级技巧的全方位内容,但Git的学习是一个实践过程。建议你在实际项目中应用这些知识,遇到问题时查阅官方文档或社区资源。随着使用深入,你会逐渐体会到Git设计的精妙之处。
祝你在Git的世界里游刃有余,编码愉快!
附录:常用Git命令速查表
功能 | 命令 |
---|---|
查看状态 | git status |
添加修改 | git add |
提交 | git commit -m "msg" |
查看历史 | git log --oneline |
创建分支 | git branch |
切换分支 | git switch |
合并分支 | git merge |
拉取更新 | git pull |
推送提交 | git push |
放弃修改 | git restore |
暂存修改 | git stash |