Git 操作完全教程:从入门到精通
在软件开发中,版本控制是不可或缺的一环。Git 作为目前最流行的分布式版本控制系统,以其高效、灵活、强大的分支管理能力,成为开发者必备的核心技能。无论你是个人开发者还是团队协作,掌握 Git 都能极大提升工作效率。
本文将带你从零开始学习 Git,涵盖安装配置、基础命令、分支管理、远程仓库协作、冲突解决以及高级技巧,通过实战案例助你快速上手。
1. Git 是什么?
Git 是一个分布式版本控制系统,由 Linux 之父 Linus Torvalds 于 2005 年创建,用于高效管理 Linux 内核开发。与集中式版本控制(如 SVN)不同,Git 每个开发者本地都拥有完整的仓库历史,可以离线提交、查看日志,协作更加灵活。
1.1 核心概念
- 仓库(Repository):存储项目文件和历史记录的地方。
- 工作区(Working Directory):本地文件系统,你直接编辑文件的地方。
- 暂存区(Staging Area / Index):临时存放修改的地方,用于准备提交。
- 提交(Commit):将暂存区的修改保存为一次历史记录,包含唯一哈希值。
- 分支(Branch):独立的开发线,默认主分支为
master或main。 - 远程仓库(Remote):托管在服务器上的仓库(如 GitHub、GitLab)。
2. 安装与配置
2.1 安装 Git
Ubuntu/Debian:
sudo apt updatesudo apt install git -ymacOS:
brew install gitWindows:下载安装包 https://git-scm.com/,安装时选择“Git Bash”等组件。
验证安装:
git --version2.2 配置用户信息
Git 每次提交都会记录用户名和邮箱,需要全局配置:
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"查看配置:
git config --list2.3 配置别名(可选)
常用别名提高效率:
git config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit config --global alias.st statusgit config --global alias.lg "log --oneline --graph --all"3. 基础操作
3.1 初始化仓库
创建新目录并初始化为 Git 仓库:
mkdir my-projectcd my-projectgit init此时会生成 .git 隐藏文件夹,存放所有版本信息。
3.2 查看状态
git status显示工作区和暂存区的状态,红色文件表示未跟踪或已修改,绿色文件表示已暂存。
3.3 添加文件到暂存区
# 添加单个文件git add README.md
# 添加所有修改git add .git add -A
# 添加所有 .js 文件git add *.js3.4 提交
git commit -m "初始提交:添加 README"提交时应写清晰的提交信息,遵循“类型:描述”格式,如 feat: 添加用户登录功能。
3.5 查看提交历史
# 完整日志git log
# 简洁单行显示git log --oneline
# 图形化显示分支git log --oneline --graph --all3.6 对比差异
# 工作区与暂存区对比git diff
# 暂存区与最新提交对比git diff --staged
# 两个提交之间的差异git diff commit1 commit24. 分支管理
分支是 Git 的核心特性,支持并行开发。
4.1 创建与切换分支
# 创建新分支git branch feature-login
# 切换分支git checkout feature-login
# 创建并切换(快捷方式)git checkout -b feature-login4.2 查看分支
# 本地分支git branch
# 远程分支git branch -r
# 所有分支git branch -a4.3 合并分支
# 先切换到目标分支(如 main)git checkout main
# 合并 feature 分支git merge feature-login4.4 删除分支
# 删除已合并的分支git branch -d feature-login
# 强制删除未合并的分支git branch -D feature-login5. 远程仓库协作
5.1 添加远程仓库
# 关联远程仓库(origin 是常用别名)git remote add origin https://github.com/username/repo.git查看远程仓库:
git remote -v5.2 推送到远程
# 首次推送,设置上游分支git push -u origin main
# 后续推送git push5.3 克隆远程仓库
git clone https://github.com/username/repo.git5.4 拉取更新
# 拉取远程更新并合并到当前分支git pull
# 先 fetch 再 merge(等同于 pull)git fetchgit merge origin/main5.5 查看远程分支
git branch -r5.6 删除远程分支
git push origin --delete feature-login6. 合并冲突解决
当两个分支修改了同一文件的同一部分时,合并会产生冲突。
6.1 产生冲突的场景
git checkout maingit merge feature-branch# Auto-merging file.txt# CONFLICT (content): Merge conflict in file.txt6.2 解决冲突
Git 会在冲突文件中标记:
<<<<<<< HEAD当前分支的内容=======要合并分支的内容>>>>>>> feature-branch手动编辑文件,保留最终版本,删除标记,然后:
git add file.txtgit commit -m "解决合并冲突"6.3 使用合并工具
git mergetool7. 撤销与回退
7.1 撤销工作区修改
# 撤销未暂存的修改git checkout -- file.txt
# 撤销所有未暂存的修改git checkout -- .7.2 撤销暂存区修改
# 将文件从暂存区移回工作区git reset HEAD file.txt7.3 修改最后一次提交
# 修改提交信息git commit --amend -m "新的提交信息"
# 追加文件到上一次提交git add forgotten-file.txtgit commit --amend --no-edit7.4 回退到历史版本
# 回退到上一个提交(保留工作区修改)git reset --soft HEAD^
# 回退到上一个提交(撤销暂存区,保留工作区)git reset --mixed HEAD^
# 回退到上一个提交(彻底丢弃工作区和暂存区)git reset --hard HEAD^
# 回退到指定提交git reset --hard commit-id7.5 恢复已删除的提交
# 查看所有操作记录git reflog
# 根据 commit-id 恢复git reset --hard commit-id8. 标签管理
标签用于标记重要版本(如 v1.0.0)。
8.1 创建标签
# 轻量标签git tag v1.0.0
# 附注标签(包含信息)git tag -a v1.0.0 -m "发布版本 1.0.0"8.2 查看标签
git tag8.3 推送标签到远程
git push origin v1.0.0
# 推送所有标签git push --tags8.4 删除标签
git tag -d v1.0.0 # 本地git push origin --delete v1.0.0 # 远程9. 高级技巧
9.1 储藏(Stash)
临时保存未提交的修改,切换分支后恢复。
# 储藏当前修改git stash
# 查看储藏列表git stash list
# 恢复最近一次储藏git stash pop
# 应用储藏但不删除git stash apply
# 删除储藏git stash drop9.2 拣选(Cherry-pick)
将其他分支的某个提交应用到当前分支。
git cherry-pick commit-id9.3 交互式变基(Interactive Rebase)
合并多个提交、修改提交信息等。
git rebase -i HEAD~3在编辑器中修改 pick 为 squash 可合并提交,reword 可修改信息。
9.4 二分查找(Bisect)
定位引入 bug 的提交。
git bisect startgit bisect bad # 当前版本有 buggit bisect good commit-id # 已知正常版本# Git 自动切换中间版本,测试后标记git bisect good/badgit bisect reset # 结束二分查找10. .gitignore 文件
忽略不需要版本控制的文件(如编译产物、依赖、日志等)。
在项目根目录创建 .gitignore,示例:
# 依赖目录node_modules/
# 编译输出dist/build/
# 系统文件.DS_StoreThumbs.db
# IDE.vscode/.idea/
# 环境变量.env已有文件被忽略后,需先删除缓存:
git rm -r --cached node_modulesgit commit -m "移除 node_modules"11. 常见问题与解决
| 问题 | 解决方法 |
|---|---|
| 不小心 commit 了敏感信息 | 使用 git commit --amend 修改最后一次提交;或使用 git filter-branch 清理历史(需谨慎) |
误用 git reset --hard | 通过 git reflog 找回丢失的提交 |
| 推送时提示非 fast-forward | 先 git pull 合并远程更新再推送 |
| 合并冲突后无法 push | 解决冲突、提交后再 push |
忘记 .gitignore 导致文件被跟踪 | 将文件加入 .gitignore 并执行 git rm --cached |
| Git 命令卡死 | 可能是 SSH 密钥问题或网络原因,尝试 ssh -T git@github.com 测试 |
12. 最佳实践
- 频繁提交:保持提交粒度小、目的单一,便于回滚和追溯。
- 编写清晰的提交信息:使用动词开头,如
feat:、fix:、docs:、refactor:。 - 使用分支进行开发:
main保持稳定,新功能在分支开发。 - 合并前同步主分支:避免冲突积累,定期
git pull origin main。 - 不要强制推送公共分支:
git push --force会覆盖他人提交,除非确认无人使用。 - 定期清理无用分支:保持仓库整洁。
13. 总结
Git 是现代软件开发的基础工具。本文从安装配置到高级用法,全面介绍了 Git 的核心操作。通过不断练习,你将能够熟练管理代码版本,高效协作。
进一步学习资源:
温馨提示:在团队协作中,建议制定统一的 Git 工作流(如 Git Flow、GitHub Flow),并定期备份远程仓库。版本控制不仅是工具,更是良好开发习惯的体现。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时









