Githug 通关指南:55 关 Git 实战闯关攻略

前言
关于 Githug
Githug 是一个基于 Ruby 开发的交互式 Git 学习工具,通过游戏化的方式帮助开发者系统掌握 Git 版本控制系统。区别于 GitHub(代码托管平台),Githug 专注于通过 55 个精心设计的关卡,覆盖从基础操作到高级技巧的完整知识体系。
首次接触 Git? 建议先阅读 Git 官方文档 或 廖雪峰的 Git 教程了解基础概念。
学习建议
学习 Git 的关键在于理解其底层原理,而非死记硬背命令。建议在闯关过程中:
- 深入理解每个命令的工作机制
- 思考不同命令之间的关联和区别
- 在实际项目中应用所学知识
- 遇到困难时善用
githug hint和官方文档
环境准备
Ruby 环境配置
Githug 基于 Ruby 运行环境,因此需要预先安装 Ruby。如已安装可跳过此步骤。
安装方式:
- 通用方法:访问 Ruby 官网下载对应平台的安装包
- Windows 系统:推荐使用 RubyInstaller,提供一键安装体验
- macOS 系统:系统自带 Ruby,也可通过 Homebrew 安装最新版本
- Linux 系统:使用包管理器安装,如
apt install ruby或yum install ruby
验证安装:
ruby --version
命令行输出版本号即表示安装成功。
命令行新手?推荐阅读 MDN 命令行速成课。
Githug 安装配置
配置 gem 源(可选,国内用户推荐):
# 移除默认源
gem sources --remove https://rubygems.org/
# 添加国内镜像源
gem sources --add https://gems.ruby-china.com/
# 验证源配置
gem sources -l
安装 Githug:
gem install githug
安装完成后即可开始使用。
初始化与使用
创建游戏目录
在终端中切换到期望的工作目录,执行:
githug
首次运行会提示创建游戏目录:
***********************************************************
* Githug *
***********************************************************
No githug directory found, do you wish to create one? [yn]
输入 y 确认后,Githug 会在当前目录下创建 git_hug 文件夹,包含所有关卡所需的 Git 仓库环境。
进入游戏目录:
cd git_hug
Windows 用户快捷操作:在文件资源管理器的地址栏输入 cmd 并回车,可在当前目录快速打开命令行。
核心命令
| 命令 | 功能说明 |
|---|---|
githug 或 githug play | 验证当前关卡完成情况 |
githug test | 运行关卡测试(同 play) |
githug hint | 获取当前关卡提示 |
githug reset | 重置当前关卡到初始状态 |
githug levels | 查看所有关卡列表 |
提示:Githug 会自动保存闯关进度,随时可以退出并在稍后继续。
开始闯关
📖 点击展开全部 55 关攻略
第 1 关:init
任务:初始化一个新的 Git 仓库。
提示:使用 git init 命令可以在当前目录初始化一个 Git 仓库。
解答:
git init
执行 githug 检查是否通过,通过后会自动进入下一关。
第 2 关:config
任务:配置你的 Git 用户名和邮箱。
提示:使用 git config 命令可以配置 Git 的各种设置。
解答:
git config user.name "你的名字"
git config user.email "你的邮箱"
第 3 关:add
任务:将文件添加到暂存区。
提示:使用 git add 命令可以将文件添加到暂存区,准备提交。
解答:
git add README.md
或者添加所有文件:
git add .
第 4 关:commit
任务:提交暂存区的文件。
提示:使用 git commit 命令可以将暂存区的文件提交到仓库。
解答:
git commit -m "Initial commit"
其中 -m 参数后面跟的是提交信息,描述本次提交的内容。
第 5 关:clone
任务:克隆一个远程仓库。
提示:使用 git clone 命令可以克隆一个远程仓库到本地。
解答:
git clone https://github.com/example/repo.git
第 6 关:clone_to_folder
任务:克隆远程仓库到指定文件夹。
提示:在 git clone 命令后添加目标文件夹名称。
解答:
git clone https://github.com/example/repo.git my_folder
第 7 关:ignore
任务:忽略不想被 Git 追踪的文件。
提示:创建 .gitignore 文件,在其中列出要忽略的文件或目录。
解答:
echo "*.log" > .gitignore
git add .gitignore
git commit -m "Add gitignore"
第 8 关:status
任务:查看当前仓库的状态。
提示:使用 git status 命令可以查看当前工作区和暂存区的状态。
解答:
git status
第 9 关:number_of_files_committed
任务:统计有多少文件被提交了。
提示:使用 git log 和其他命令查看提交历史。
解答:
git log --oneline --stat
然后数一数文件数量,输入答案。
第 10 关:rm
任务:从 Git 仓库中删除文件。
提示:使用 git rm 命令可以从仓库中删除文件。
解答:
git rm deleteme.rb
第 11 关:rm_cached
任务:从暂存区移除文件,但保留在工作目录中。
提示:使用 git rm --cached 命令。
解答:
git rm --cached deleteme.rb
第 12 关:stash
任务:暂存当前工作区的修改。
提示:当你需要临时切换到其他分支,但又不想提交当前的修改时,可以使用 git stash。
解答:
git stash
恢复暂存的内容:
git stash pop
第 13 关:rename
任务:重命名文件并让 Git 追踪这个变化。
提示:使用 git mv 命令可以重命名文件。
解答:
git mv oldfile.txt newfile.txt
第 14 关:restructure
任务:移动文件到新的目录结构。
提示:使用 git mv 命令移动文件。
解答:
git mv *.html src/
第 15 关:log
任务:查看提交历史。
提示:使用 git log 命令查看提交记录。
解答:
git log
第 16 关:tag
任务:给当前提交打标签。
提示:使用 git tag 命令可以给提交打标签,方便版本管理。
解答:
git tag v1.0.0
第 17 关:push_tags
任务:推送标签到远程仓库。
提示:标签不会自动推送,需要显式推送。
解答:
git push --tags
第 18 关:commit_amend
任务:修改最后一次提交。
提示:使用 git commit --amend 可以修改最近一次提交的信息或内容。
解答:
git commit --amend -m "新的提交信息"
第 19 关:commit_in_future
任务:创建一个未来时间的提交。
提示:可以使用 --date 参数指定提交时间。
解答:
git commit --date="2025-12-31" -m "Future commit"
第 20 关:reset
任务:重置到之前的提交。
提示:使用 git reset 命令可以回退版本。
解答:
git reset HEAD^
第 21 关:reset_soft
任务:软重置,保留工作区的修改。
提示:--soft 参数只重置 HEAD,保留暂存区和工作区。
解答:
git reset --soft HEAD^
第 22 关:checkout_file
任务:从仓库中恢复文件。
提示:使用 git checkout 可以恢复文件到之前的状态。
解答:
git checkout HEAD -- filename
第 23 关:remote
任务:查看远程仓库。
提示:使用 git remote 命令查看远程仓库信息。
解答:
git remote
查看详细信息:
git remote -v
第 24 关:remote_url
任务:查看远程仓库的 URL。
提示:使用 git remote -v 或 git remote get-url 命令。
解答:
git remote get-url origin
第 25 关:pull
任务:从远程仓库拉取更新。
提示:使用 git pull 命令拉取并合并远程仓库的更新。
解答:
git pull origin master
第 26 关:remote_add
任务:添加远程仓库。
提示:使用 git remote add 命令添加远程仓库。
解答:
git remote add origin https://github.com/username/repo.git
第 27 关:push
任务:推送本地提交到远程仓库。
提示:使用 git push 命令推送代码。
解答:
git push origin master
第 28 关:diff
任务:查看文件的修改内容。
提示:使用 git diff 命令查看工作区与暂存区的差异。
解答:
git diff
第 29 关:blame
任务:查看文件每一行的修改者。
提示:使用 git blame 命令可以查看文件每一行是谁修改的。
解答:
git blame filename
第 30 关:branch
任务:创建新分支。
提示:使用 git branch 命令创建分支。
解答:
git branch test_branch
第 31 关:checkout
任务:切换分支。
提示:使用 git checkout 命令切换分支。
解答:
git checkout test_branch
第 32 关:checkout_tag
任务:切换到某个标签。
提示:标签也可以使用 git checkout 切换。
解答:
git checkout v1.0
第 33 关:checkout_tag_over_branch
任务:当标签和分支同名时,切换到标签。
提示:使用 tags/ 前缀明确指定标签。
解答:
git checkout tags/v1.0
第 34 关:branch_at
任务:在指定提交处创建分支。
提示:在 git branch 命令后指定提交的 SHA 值。
解答:
git branch test_branch commit_sha
第 35 关:delete_branch
任务:删除分支。
提示:使用 git branch -d 命令删除分支。
解答:
git branch -d delete_me
强制删除未合并的分支:
git branch -D delete_me
第 36 关:push_branch
任务:推送分支到远程仓库。
提示:使用 git push 命令推送指定分支。
解答:
git push origin test_branch
第 37 关:merge
任务:合并分支。
提示:使用 git merge 命令合并分支。
解答:
git merge feature_branch
第 38 关:fetch
任务:从远程仓库获取更新但不合并。
提示:git fetch 只下载远程更新,不会自动合并。
解答:
git fetch origin
第 39 关:rebase
任务:使用 rebase 整理提交历史。
提示:git rebase 可以让提交历史更加线性。
解答:
git rebase master
第 40 关:rebase_onto
任务:使用 rebase --onto 移动分支。
提示:--onto 参数可以将分支移动到新的基础上。
解答:
git rebase --onto master feature new_branch
第 41 关:repack
任务:重新打包仓库。
提示:使用 git repack 命令可以优化仓库存储。
解答:
git repack -d
第 42 关:cherry-pick
任务:挑选特定的提交应用到当前分支。
提示:使用 git cherry-pick 可以选择性地应用提交。
解答:
git cherry-pick commit_sha
第 43 关:grep
任务:在代码中搜索内容。
提示:使用 git grep 命令在代码中搜索文本。
解答:
git grep "搜索内容"
第 44 关:rename_commit
任务:重命名提交信息。
提示:使用 git rebase -i 进入交互式 rebase。
解答:
git rebase -i HEAD~2
然后将要修改的提交前的 pick 改为 reword,保存后修改提交信息。
第 45 关:squash
任务:合并多个提交。
提示:使用 git rebase -i 并将提交标记为 squash。
解答:
git rebase -i HEAD~3
将要合并的提交前的 pick 改为 squash 或 s。
第 46 关:merge_squash
任务:使用 squash 方式合并分支。
提示:--squash 参数会将所有提交压缩为一个。
解答:
git merge --squash feature_branch
git commit -m "Squashed commit"
第 47 关:reorder
任务:调整提交顺序。
提示:使用 git rebase -i 调整提交顺序。
解答:
git rebase -i HEAD~3
在编辑器中调整提交的顺序。
第 48 关:bisect
任务:使用二分查找定位 bug。
提示:git bisect 可以帮助快速定位引入 bug 的提交。
解答:
git bisect start
git bisect bad HEAD
git bisect good v1.0
第 49 关:stage_lines
任务:只暂存文件的部分修改。
提示:使用 git add -p 进入交互式暂存。
解答:
git add -p filename
第 50 关:find_old_branch
任务:找回已删除的分支。
提示:使用 git reflog 查看操作历史。
解答:
git reflog
git checkout -b old_branch commit_sha
第 51 关:revert
任务:撤销某个提交。
提示:使用 git revert 创建一个新提交来撤销之前的修改。
解答:
git revert commit_sha
第 52 关:restore
任务:恢复文件到之前的状态。
提示:使用 git restore 命令(Git 2.23+ 新增)。
解答:
git restore filename
第 53 关:conflict
任务:解决合并冲突。
提示:手动编辑冲突文件,然后标记为已解决。
解答:
- 编辑冲突文件,删除冲突标记
- 添加到暂存区:
git add filename - 完成合并:
git commit
第 54 关:submodule
任务:使用子模块。
提示:使用 git submodule 命令管理子模块。
解答:
git submodule add https://github.com/example/repo.git
第 55 关:contribute
任务:为开源项目贡献代码。
提示:这一关是鼓励你为开源项目做贡献!
解答:
恭喜你完成了所有关卡!现在你可以:
- Fork 一个你感兴趣的开源项目
- Clone 到本地并创建新分支
- 做出改进并提交
- 推送到你的 Fork
- 创建 Pull Request
进阶技巧
完成 55 关后,这里总结一些实际开发中的常用操作模式。
分支管理工作流
Git 的分支模型是其核心优势,理解分支操作对团队协作至关重要:
# 创建功能分支
git branch feature/user-auth
# 切换到分支
git checkout feature/user-auth
# 创建并切换(推荐方式)
git checkout -b feature/user-auth
# 查看所有分支(本地 + 远程)
git branch -a
# 合并分支(快进合并)
git merge feature/user-auth
# 合并分支(保留合并记录)
git merge --no-ff feature/user-auth
# 删除已合并分支
git branch -d feature/user-auth
# 强制删除分支(慎用)
git branch -D feature/user-auth
推荐工作流:
- 从主分支创建功能分支
- 在功能分支上开发和提交
- 定期从主分支拉取更新并合并
- 功能完成后合并回主分支
- 删除已合并的功能分支
历史查询技巧
掌握历史查询能快速定位问题和理解代码演变:
# 查看完整提交历史
git log
# 单行格式查看(快速浏览)
git log --oneline
# 图形化展示分支结构
git log --graph --oneline --all --decorate
# 查看指定文件的修改历史
git log -p filename
# 按作者筛选
git log --author="username"
# 按时间范围筛选
git log --since="2024-01-01" --until="2024-12-31"
# 按提交信息关键词搜索
git log --grep="bugfix"
# 查看某次提交的详细信息
git show commit_hash
撤销与回退操作
注意:以下操作涉及历史修改,团队协作时需谨慎使用。
# 撤销工作区修改(未暂存)
git restore filename
# 或旧版命令
git checkout -- filename
# 取消暂存(保留修改)
git restore --staged filename
# 或旧版命令
git reset HEAD filename
# 修改最后一次提交
git commit --amend
# 回退到上一版本(保留修改)
git reset --soft HEAD^
# 回退到上一版本(不保留修改)
git reset --hard HEAD^
# 回退到指定版本
git reset --hard commit_id
# 创建反向提交(安全撤销)
git revert commit_id
reset 参数说明:
--soft:仅移动 HEAD,保留暂存区和工作区--mixed(默认):重置暂存区,保留工作区--hard:重置暂存区和工作区,彻底丢弃修改
结语
通过 Githug 的 55 个关卡,你已经系统地学习了 Git 版本控制的核心知识:
基础能力:
- Git 仓库的初始化与配置
- 文件的添加、提交、删除操作
- 工作区、暂存区、版本库的状态管理
进阶技能:
- 分支的创建、切换、合并与删除
- 远程仓库的协作流程
- 提交历史的查看与修改
- 冲突的识别与解决
高级应用:
- 交互式 rebase 的使用
- Cherry-pick 的精确提交选择
- Bisect 的二分查找调试
- Submodule 的模块化管理
持续学习建议
Git 是一个博大精深的工具,掌握基础后建议:
- 实践为主:在实际项目中应用所学知识,遇到问题时查阅文档
- 理解原理:深入学习 Git 的三区模型、对象模型等底层机制
- 规范协作:学习 Git Flow、GitHub Flow 等团队协作规范
- 工具辅助:熟练使用 Git GUI 工具(如 SourceTree、GitKraken)提高效率
遇到问题?
- 使用
git help <command>查看命令帮助 - 阅读 Pro Git 这本经典书籍
- 在 Stack Overflow 搜索相关问题
- 参考 Git 官方文档获取权威说明
坚持练习,你一定能成为 Git 高手!
参考资源
官方文档
- Git 官方文档 - 最权威的 Git 参考手册
- Pro Git 中文版 - Git 官方推荐书籍,免费在线阅读
- Git Reference - 命令行参考速查
学习教程
- 廖雪峰的 Git 教程 - 适合初学者的中文教程
- Learn Git Branching - 可视化交互学习分支操作
- Githug 项目仓库 - 本文介绍的闯关游戏
工作流规范
- Git Flow - 经典的分支管理模型
- GitHub Flow - GitHub 推荐的简化工作流
- Conventional Commits - 提交信息规范
可视化工具
- SourceTree - 免费的 Git GUI 客户端
- GitKraken - 跨平台的 Git 图形化工具
- GitHub Desktop - GitHub 官方桌面客户端
—— 本文完 ——