在游戲中學習Git之Githug(Windows版)
1. githug安裝
- 首先,下載Git工具,并配置Git工具安裝目下面的cmd目錄到環境變量的PATH中,這樣我們就可以在cmd下面使用git了。
- 其次,githug是運行在ruby上的,所以我們還要安裝ruby,下載ruby,安裝時勾選“Add Ruby executables to your PATH”,忘了勾選的要配置Ruby安裝目錄下面的bin目錄到環境變量的PATH中。
- 再次,安裝githug,在安裝githug先確認ruby好了嗎,然后在安裝githug
- 在cmd下面輸入ruby --version查看ruby是否安裝好了,若沒有,則說明環境變量還沒有生效,注銷戶用再登錄
- 在cmd下面輸入gem install githug安裝githug
2. githug相關說明
1. githug是用來干什么的
githug是設計給你學習Git的實用方法。它有一系列的關卡,每一關都需要你用git命令得到一個正確的答案。
2. githug關卡說明
githug一共有55關:
#1: init
#2: config
#3: add
#4: commit
#5: clone
#6: clone_to_folder
#7: ignore
#8: include
#9: status
#10: number_of_files_committed
#11: rm
#12: rm_cached
#13: stash
#14: rename
#15: restructure
#16: log
#17: tag
#18: push_tags
#19: commit_amend
#20: commit_in_future
#21: reset
#22: reset_soft
#23: checkout_file
#24: remote
#25: remote_url
#26: pull
#27: remote_add
#28: push
#29: diff
#30: blame
#31: branch
#32: checkout
#33: checkout_tag
#34: checkout_tag_over_branch
#35: branch_at
#36: delete_branch
#37: push_branch
#38: merge
#39: fetch
#40: rebase
#41: repack
#42: cherry-pick
#43: grep
#44: rename_commit
#45: squash
#46: merge_squash
#47: reorder
#48: bisect
#49: stage_lines
#50: find_old_branch
#51: revert
#52: restore
#53: conflict
#54: submodule
#55: contribute
3. githug常用命令
-
githug
: 開始闖關或進入下一關 -
githug hint
: 過關提示 -
githug levels
: 顯示關卡列表 -
githug reset [關卡名]
: 重啟本關或者重啟到指定關卡名的關卡
4. 開始闖關
1. 第1關
- 關卡描述:
有一個新的目錄“git_hug”被創建了,在它里面初始化一個倉庫
- 通關操作:
git init
2. 第2關
- 關卡描述:
設置你的有戶名與電子郵箱,這很重要,只有這樣你的提交才會被識別
- 通關操作:
git config --local user.name lavor
git config --local user.email lavor@qq.com
3. 第3關
- 關卡描述:
有一個名叫“README”的文件夾,你要將它加入到暫存區。
注意:每一關都是一個新倉庫,不要在前面的關卡找文件。
- 通關操作:
git add README
4. 第4關
- 關卡描述:
“README”文件已經被加入到暫存區,現在提交它。
- 通關操作:
git commit -m "add README"
5. 第5關
- 關卡描述:
從“https://github.com/Gazler/cloneme”克隆倉庫。
- 通關操作:
git clone https://github.com/Gazler/cloneme
6. 第6關
- 關卡描述:
從“https://github.com/Gazler/cloneme”克隆倉庫到“my_cloned_repo”目錄。
- 通關操作:
git clone https://github.com/Gazler/cloneme my_cloned_repo
7. 第7關
- 關卡描述:
文本編輯器“vim”為所有文件創建以“.swp”結尾的文件,這些文件當前都被打開了。我們不希望他們潛入到倉庫。讓倉庫忽略“.swp”文件。
- 通關操作:
//由于沒有裝vim,直接用記事本打開“.gitignore”文件,在文件末尾換行并加上“*.swp”。
8. 第8關
- 關卡描述:
注意一些文件以“.a”為擴展名。我們希望忽略這些文件除了“lib.a”文件。
- 通關操作:
//由于沒有裝vim,直接用記事本打開“.gitignore”文件,在文件末尾換行并加上“*.a”,再換行,在文件末尾加上“!lib.a”。
9. 第9關
- 關卡描述:
倉庫中有一些文件,其中一個沒有被跟蹤,它是哪個文件。
- 通關操作:
git status
10. 第10關
- 關卡描述:
倉庫中有一些文件。多少文件將要被提交。
- 通關操作:
git status
11. 第11關
- 關卡描述:
一個文件從工作樹上面移除了,但是沒有從倉庫中移除。找到這個文件并移除它。
- 通關操作:
git status
git add deleteme.rb
12. 第12關
- 關卡描述:
一個文件以外地加入到你的暫存區,找出這個文件并將它從暫存區移除。
*注意*:不要將它從文件系統中移除,僅僅將它git中移除。
- 通關操作:
git status
git rm --cached deleteme.rb
13. 第13關
- 關卡描述:
你做了一些修改,并且向稍后再它們上面工作。你應該保存它們,但是不提交它們。
- 通關操作:
git stash
14. 第14關
- 關卡描述:
我們有一個名為“oldfile.txt”的文件。我們想要將它重命名為“newfile.txt”并保存該修改。
- 通關操作:
git mv oldfile.txt newfile.txt
15. 第15關
- 關卡描述:
你添加了一些文件到你的倉庫,但現在知道你的項目需要進行調整。創建一個新的文件夾命名為“src”,使用git將所有的".html"文件到該文件夾中。
- 通關操作:
git mv about.html contact.html index.html src
16. 第16關
- 關卡描述:
你將要尋找最新提交的哈希,為此你將研究該倉庫的日志。
- 通關操作:
git log
17. 第17關
- 關卡描述:
我們有一個git倉庫,并且我們想用“new_tags”來標記當前的提交。
- 通關操作:
git tag "new_tag"
18. 第18關
- 關卡描述:
倉庫中有一些標記沒有被推送到遠程倉庫,現在推送它們。
- 通關操作:
git push --tags origin master
19. 第19關
- 關卡描述:
“README”文件被提交了,但是“forgotten_file.rb”文件好像忘了提交。添加這個文件,并改正上次提交使之包含該文件。
- 通關操作:
git add forgotten_file.rb
git commit --amend -m "改正后提交"
20. 第20關
- 關卡描述:
用未來的時間日期(比如明天)來提交改變。
- 通關操作:
git commit --date=06.13.2016T09:00:00 -m "指定提交時間為2016年6月13日9點整"
21. 第21關
- 關卡描述:
有兩個文件要提交,目標是將每個文件添加為單獨提交,但意外地兩個文件都被添加到暫存區了。用“reset”命令將“to_commit_second.rb”文件從暫存區移除(不做提交操作)。
- 通關操作:
git reset HEAD to_commit_second.rb
22. 第22關
- 關卡描述:
你提交太快了。現在你要撤消最后一次提交,同時保持索引。
- 通關操作:
git reset --soft HEAD~1
23. 第23關
- 關卡描述:
文件已經被修改了,但是你不想保存該修改。從最后一次提交中檢出“config.rb”文件。
- 通關操作:
git checkout config.rb
24. 第24關
- 關卡描述:
項目有一個遠程倉庫,找到它。
- 通關操作:
git remote -v
25. 第25關
- 關卡描述:
遠程倉庫有一個與之關聯的url。輸入遠程倉庫“remote_location” 的url。
- 通關操作:
git remote -v
26. 第26關
- 關卡描述:
你需要從“origin”倉庫拉下改變到本地倉庫。
- 通關操作:
git pull origin master
27. 第27關
- 關卡描述:
添加一個url為“https://github.com/githug/githug”的遠程倉庫,并為該遠程倉庫命名為“origin”。
- 通關操作:
git remote add origin https://github.com/githug/githug
28. 第28關
- 關卡描述:
你的本地“master”分支與遠程倉庫“origin”的“master” 分支不一致,請用遠程倉庫“origin”的“master” 分支來改變你的提交,并將提交推送到遠程倉庫。
- 通關操作:
git rebase origin/master
git push origin master
29. 第29關
- 關卡描述:
自最后一次提交后,“app.rb”文件發生了一些改變。找出該文件那些行被改變了。
- 通關操作:
git diff
30. 第30關
- 關卡描述:
有人將密碼放進了“config.rb”文件中,找出是誰。
- 通關操作:
git blame config.rb
31. 第31關
- 關卡描述:
有一個新的目錄“git_hug”被創建了,在它里面初始化一個倉庫
- 通關操作:
git init
32. 第32關
- 關卡描述:
你想在一段可能打破一些東西的代碼上工作,創建一個“test_code”分支。
- 通關操作:
git branch test_code
33. 第33關
- 關卡描述:
你需要在“1.2”版本的應用程序上修復一個bug。檢出“v1.2”標記。
- 通關操作:
git checkout v1.2
34. 第34關
- 關卡描述:
你需要在“1.2”版本的應用程序上修復一個bug。檢出“v1.2”標記(注意:有一個名為“v1.2”的分支)。
- 通關操作:
git checkout tags/v1.2
35. 第35關
- 關卡描述:
在前一個提交你忘了創建分支,并在該分支上進行提交操作。在最后一次提交前創建一個名為“test_branch”的分支。
- 通關操作:
git branch test_branch HEAD~1
36. 第36關
- 關卡描述:
在你的項目中創建了太多的分支。有一個舊的名為“delete_me”的分支,你應該刪除它。
- 通關操作:
git branch -d delete_me
37. 第37關
- 關卡描述:
在本地分支上你做了一些改變,并且想共享它,但是不準備將它合并到“master”分支上。
- 通關操作:
git push origin test_branch:test_branch
38. 第38關
- 關卡描述:
在“feature”分支上有一個文件,讓我們將它合并到“master”分支上。
- 通關操作:
git merge feature
39. 第39關
- 關卡描述:
好像有一個新的分支被推送到了遠程倉庫。得到與本地倉庫的改變,但是不合并它們。
- 通關操作:
git fetch origin
40. 第40關
- 關卡描述:
我們用“git rebase”工作流與“feature”分支準備進入“master”分支。將“feature”分支上的改變合并到“master”上。
- 通關操作:
git rebase master feature
41. 第41關
- 關卡描述:
優化你的倉庫是如何包裝的,確保多余的包被刪除。
- 通關操作:
git repack -d
42. 第42關
- 關卡描述:
你的新功能是不值得花時間的,你將要刪除它。但是它有一個提交填充了“README”文件,你想要將這個提交同樣應用到“master”分支上。
- 通關操作:
git log --all
git cherry-pick ca32a6dac7b6f97975edbe19a4296c2ee7682f68
43. 第43關
- 關卡描述:
你項目的截止日期快到了,你想評估你的代碼中還有多少“TODO”剩下。
- 通關操作:
git grep TODO
44. 第44關
- 關卡描述:
改正你第一次(非根)提交信息中的錯誤。
- 通關操作:
git log
git rebase -i a3d1ecb
45. 第45關
- 關卡描述:
你做了幾次提交,但是想將這些修改都合并到一個提交中。
- 通關操作:
git log
git rebase -i 9760312
46. 第46關
- 關卡描述:
合并“long-feature-branch”分支中所有的提交到一個提交中。
- 通關操作:
git merge --squash long-feature-branch
git commit -m "merge squash"
47. 第47關
- 關卡描述:
你做了幾次提交,但是順序錯了。請為你的提交重新排序。
- 通關操作:
git log
git rebase -i b49d328
git log
48. 第48關
- 關卡描述:
一個bug在某個地方被引進,你知道運行“ruby prog.rb 5”應該輸出“15”。你同樣可以運行“make test”。進入bug的提交的哈希的前7個字母是什么。
- 通關操作:
git log
git bisect start master f608824
git bisect run make test
PS:雖然操作正確,也找到了錯誤的提交,但是卻不能通過本關,應該是沒有“make”命令的原因。直接利用“githug reset stage_lines”調到第49關,之后即使闖過了第49關進入下一關時還是會進入第48關,所以第49關及以后,都需要通過“githug reset 關卡名”來進入指定關卡。
49. 第49關
- 關卡描述:
你在一個單獨的文件里做了一些修改,這些修改屬于兩個功能。但是這些修改都沒有被暫存,暫存屬于第一個功能的修改。
- 通關操作:
git status
git add feature.rb -p
e
50. 第50關
- 關卡描述:
你一直在一個分支工作,被一個主要問題弄得心煩意亂,并且你忘了這個分支的名字。切換回那個分支。
- 通關操作:
git reflog
git checkout solve_world_hunger
51. 第51關
- 關卡描述:
你做了多次提交,但是想要撤銷中間的提交。所有的提交已經被推送,你不能改變現存的歷史。
- 通關操作:
git log
git revert 59f058e
git log
52. 第52關
- 關卡描述:
你決定通過運行“git reset --hard HEAD^”來刪除最新的一次提交(這是不明智的)。
稍后你改變了想法,你想要回滾那次提交。重新存儲被刪除的提交。
- 通關操作:
git reflog
git checkout e185df9
53. 第53關
- 關卡描述:
你需要合并“mybranch”分支到當前分支(“master”分支)。
但是“mybranch”分支中可能有一些錯誤的改變,這可能引起沖突。
解決合并中你遇到的沖突,并完成合并操作。
- 通關操作:
git merge mybranch
vim poem.txt
git add poem.txt
git commit -m "add poem.txt"

54. 第54關
- 關卡描述:
你想要將“https://github.com/jackmaney/githug-include-me”倉庫的文件放進“./githug-include-me”目錄。
這樣做,不通過克隆倉庫或者復制遠程倉庫文件到本地倉庫。
- 通關操作:
git submodule add https://github.com/jackmaney/githug-include-me githug-include-me
55. 第55關
- 關卡描述:
這是最后一關,目標是通過在Github上發出一個pull request請求來為該倉庫做貢獻。
注意這一關是被設計用來鼓勵你為Githug做有效的貢獻,而不是用來測試你創建 pull request請求的能力。
可以被接受的貢獻有關卡,bug修復,文檔改進。
更過精彩內容盡在我的github倉庫:https://github.com/lavor-zl/Github-Git