Git 完全使用指南:从入门到精通
Git 是目前世界上最流行的分布式版本控制系统,被广泛应用于软件开发和内容管理。本教程将从基础概念讲起,逐步深入,帮助你掌握 Git 的核心功能和高级技巧。
目录
* 3. 基本配置
* 4. 核心概念
* 5. 基本操作
* 6. 分支管理
* 7. 远程仓库
* 8. 高级技巧
* 9. 常见问题
1. Git 简介
Git 是由 Linus Torvalds 于 2005 年为开发 Linux 内核而创建的分布式版本控制系统。与集中式版本控制系统(如 SVN)不同,Git 不需要中央服务器即可工作,每个开发者都拥有完整的代码仓库副本。
Git 的主要优势:
* 分布式架构,本地即可完成大部分操作
* 强大的分支管理能力
* 高效的版本控制,只记录文件的变化
* 支持离线工作
* 数据完整性高,所有数据都有校验和
2. Git 安装
Windows 系统
1. 访问 Git 官网 下载安装程序
2. 运行安装程序,按照默认选项安装即可
3. 安装完成后,打开命令提示符或 PowerShell,输入 git --version 验证安装
macOS 系统
1. 使用 Homebrew 安装:brew install git
2. 或从 Git 官网 下载安装包
3. 验证安装:git --version
Linux 系统
* Ubuntu/Debian:sudo apt-get install git
* Fedora:sudo dnf install git
* CentOS:sudo yum install git
* 验证安装:git --version
3. 基本配置
安装完成后,需要进行基本配置,至少要设置用户名和邮箱,这些信息会出现在你的提交记录中。
# 设置用户名
git config --global user.name "Your Name"
# 设置邮箱
git config --global user.email "your.email@example.com"
# 查看配置信息
git config --list
# 配置默认编辑器(可选)
git config --global core.editor "code --wait" # VS Code
# 或
git config --global core.editor "vim" # Vim
--global 选项表示这是全局配置,会应用到当前用户的所有 Git 仓库。如果只想对当前仓库进行配置,可以去掉该选项。
4. 核心概念
在开始使用 Git 之前,理解以下核心概念非常重要:
* 工作区(Working Directory) :你当前正在操作的文件目录
* 暂存区(Staging Area) :用于临时存放即将提交的文件变更
* 本地仓库(Local Repository) :存储在本地的版本历史数据库
* 远程仓库(Remote Repository) :存储在网络上的共享仓库(如 GitHub、GitLab 等)
* 提交(Commit) :将暂存区的变更保存到本地仓库的操作,每个提交都有唯一的哈希值标识
* 分支(Branch) :独立的开发线,可以从主分支创建,用于开发新功能或修复 bug
Git 工作流程简图:
工作区 → 暂存区 → 本地仓库 → 远程仓库
5. 基本操作
初始化仓库
# 创建新目录并初始化仓库
mkdir myproject
cd myproject
git init
# 或在现有目录初始化仓库
cd existing-project
git init
执行 git init 后,会在当前目录创建一个隐藏的 .git 文件夹,里面包含了 Git 仓库的所有元数据。
克隆远程仓库
如果项目已经存在于远程仓库,可以直接克隆到本地:
git clone https://github.com/username/repository.git
查看文件状态
# 查看工作区和暂存区的状态
git status
# 简洁输出
git status -s
状态说明:
* ??:未跟踪的文件
* A:已添加到暂存区
* M:已修改的文件
* D:已删除的文件
添加文件到暂存区
# 添加指定文件
git add filename.txt
# 添加当前目录所有文件
git add .
# 添加所有修改和删除的文件,但不包括未跟踪的文件
git add -u
# 交互式添加
git add -i
提交到本地仓库
# 基本提交
git commit -m "提交说明"
# 跳过暂存区,直接提交已跟踪的修改
git commit -am "提交说明"
# 修改最后一次提交(谨慎使用,尤其是已推送到远程的提交)
git commit --amend
提交说明应清晰描述本次修改的内容,建议遵循 Conventional Commits 规范。
查看提交历史
# 查看完整提交历史
git log
# 简洁查看
git log --oneline
# 查看最近n次提交
git log -n 3
# 图形化展示分支历史
git log --graph --oneline --all
# 查看文件的修改历史
git log -- filename.txt
撤销操作
# 撤销工作区的修改(恢复到最近一次提交或暂存的状态)
git checkout -- filename.txt
# 撤销暂存区的修改(将文件从暂存区移回工作区)
git reset HEAD filename.txt
# 回退到指定版本(谨慎使用,会修改提交历史)
git reset --hard <commit-hash>
# 查看所有操作记录,以便恢复误操作
git reflog
6. 分支管理
分支是 Git 最强大的功能之一,它允许你在不影响主代码的情况下进行开发。
基本分支操作
# 查看所有分支
git branch
# 创建新分支
git branch feature-branch
# 切换到指定分支
git checkout feature-branch
# 创建并切换到新分支(上面两个命令的简写)
git checkout -b feature-branch
# 删除分支(确保已合并到主分支)
git branch -d feature-branch
# 强制删除未合并的分支
git branch -D feature-branch
# 给分支重命名
git branch -m old-name new-name
在 Git 2.23+ 版本中,可以使用 switch 命令代替 checkout 进行分支切换:
# 切换分支
git switch feature-branch
# 创建并切换到新分支
git switch -c feature-branch
合并分支
# 切换到目标分支(通常是主分支)
git checkout main
# 合并源分支到当前分支
git merge feature-branch
如果合并过程中出现冲突,Git 会提示哪些文件有冲突。你需要手动编辑这些文件解决冲突,然后执行 git add 和 git commit 完成合并。
变基操作
变基(rebase)是另一种整合分支的方式,它会将一个分支的修改应用到另一个分支上,形成线性的提交历史。
# 切换到要变基的分支
git checkout feature-branch
# 将 feature-branch 变基于 main 分支
git rebase main
变基与合并的区别:
* 合并会创建一个新的合并提交,保留分支历史
* 变基会改写提交历史,使提交记录更整洁
7. 远程仓库
远程仓库是团队协作的核心,常用的远程仓库服务有 GitHub、GitLab、Bitbucket 等。
远程仓库操作
# 查看远程仓库
git remote
# 查看远程仓库详细信息
git remote -v
# 添加远程仓库
git remote add origin https://github.com/username/repository.git
# 重命名远程仓库
git remote rename old-name new-name
# 删除远程仓库
git remote remove origin
拉取和推送
# 从远程仓库拉取最新代码
git pull origin main
# 推送到远程仓库
git push origin main
# 推送新分支到远程仓库
git push -u origin feature-branch
# 拉取远程分支到本地(本地不存在该分支)
git checkout -b local-branch origin/remote-branch
-u 选项用于设置 upstream,之后可以直接使用 git push 和 git pull 而无需指定远程和分支。
协作工作流
常见的 Git 工作流:
1. 集中式工作流:所有人都在 main 分支上工作,适合小型团队
2. Feature Branch Workflow:每个功能在单独分支开发,完成后合并到主分支
3. Gitflow Workflow:有严格的分支模型,包括 main、develop、feature、release、hotfix 等分支
4. Forking Workflow:适合开源项目,通过 fork 仓库和 pull request 进行协作
8. 高级技巧
stash 暂存工作区
当你需要切换分支但不想提交当前修改时,可以使用 stash:
# 暂存当前工作区的修改
git stash
# 查看所有 stash
git stash list
# 应用最近的 stash 并保留 stash 记录
git stash apply
# 应用指定的 stash 并保留 stash 记录
git stash apply stash@{1}
# 应用最近的 stash 并删除 stash 记录
git stash pop
# 删除最近的 stash
git stash drop
# 删除所有 stash
git stash clear
cherry-pick 挑选提交
将某个分支的特定提交应用到当前分支:
# 挑选单个提交
git cherry-pick <commit-hash>
# 挑选多个连续提交(左开右闭区间)
git cherry-pick <start-hash>..<end-hash>
# 包括 start-hash 在内的连续提交
git cherry-pick <start-hash>^..<end-hash>
忽略文件
创建 .gitignore 文件来指定不需要纳入版本控制的文件:
# 忽略所有 .log 文件
*.log
# 忽略 node_modules 目录
node_modules/
# 忽略特定文件
secret.txt
# 不忽略 .gitignore 和 README.md
!.gitignore
!README.md
标签管理
为重要的版本创建标签,通常用于发布版本:
# 创建轻量标签
git tag v1.0.0
# 创建带注释的标签
git tag -a v1.0.0 -m "版本 1.0.0"
# 查看所有标签
git tag
# 推送标签到远程仓库
git push origin v1.0.0
# 推送所有标签
git push origin --tags
# 检出标签(会进入分离头指针状态)
git checkout v1.0.0
9. 常见问题
如何撤销已经推送到远程的提交?
# 创建一个新的提交来撤销指定提交的更改
git revert <commit-hash>
git push origin main
如何找回误删除的分支?
# 查找分支最后一次提交的哈希值
git reflog
# 从该提交恢复分支
git checkout -b recovered-branch <commit-hash>
如何处理合并冲突?
1. 当 git merge 或 git rebase 提示冲突时,编辑冲突文件
2. 冲突部分会被 <<<<<<< HEAD、======= 和 >>>>>>> branch-name 标记
3. 编辑文件保留需要的部分,删除冲突标记
4. 执行 git add <conflict-file> 标记为已解决
5. 继续合并或变基过程(git commit 或 git rebase --continue)
如何查看某个提交的具体修改?
git show <commit-hash>
如何比较两个分支的差异?
git diff branch1..branch2
总结
本教程涵盖了 Git 的基本概念和常用操作,但 Git 的功能远不止于此。要真正掌握 Git,建议结合实际项目进行练习,并查阅 Git 官方文档 深入学习。
记住,Git 是一个强大的工具,熟练使用它将极大提高你的开发效率和协作能力。遇到问题时,不要害怕使用 git help <command> 查看命令帮助,或搜索社区解决方案。
祝你在 Git 的学习和使用过程中取得进步!