在游戲中學(xué)習(xí)Git之Githug(Windows版)

在游戲中學(xué)習(xí)Git之Githug(Windows版)


1. githug安裝

  • 首先剂买,下載Git工具付呕,并配置Git工具安裝目下面的cmd目錄到環(huán)境變量的PATH中公般,這樣我們就可以在cmd下面使用git了秘噪。
  • 其次厦酬,githug是運(yùn)行在ruby上的迈勋,所以我們還要安裝ruby炬灭,下載ruby,安裝時(shí)勾選“Add Ruby executables to your PATH”靡菇,忘了勾選的要配置Ruby安裝目錄下面的bin目錄到環(huán)境變量的PATH中重归。
  • 再次,安裝githug厦凤,在安裝githug先確認(rèn)ruby好了嗎鼻吮,然后在安裝githug
    • 在cmd下面輸入ruby --version查看ruby是否安裝好了,若沒有较鼓,則說明環(huán)境變量還沒有生效椎木,注銷戶用再登錄
    • 在cmd下面輸入gem install githug安裝githug

2. githug相關(guān)說明


1. githug是用來干什么的

githug是設(shè)計(jì)給你學(xué)習(xí)Git的實(shí)用方法违柏。它有一系列的關(guān)卡,每一關(guān)都需要你用git命令得到一個(gè)正確的答案香椎。

2. githug關(guān)卡說明

githug一共有55關(guān):

#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: 開始闖關(guān)或進(jìn)入下一關(guān)
  • githug hint: 過關(guān)提示
  • githug levels: 顯示關(guān)卡列表
  • githug reset [關(guān)卡名]: 重啟本關(guān)或者重啟到指定關(guān)卡名的關(guān)卡

4. 開始闖關(guān)


1. 第1關(guān)


  • 關(guān)卡描述:
有一個(gè)新的目錄“git_hug”被創(chuàng)建了漱竖,在它里面初始化一個(gè)倉庫  
  • 通關(guān)操作:
git init  

2. 第2關(guān)


  • 關(guān)卡描述:
設(shè)置你的有戶名與電子郵箱,這很重要畜伐,只有這樣你的提交才會(huì)被識別  
  • 通關(guān)操作:
git config --local user.name lavor  
git config --local user.email lavor@qq.com

3. 第3關(guān)


  • 關(guān)卡描述:
有一個(gè)名叫“README”的文件夾馍惹,你要將它加入到暫存區(qū)。  
注意:每一關(guān)都是一個(gè)新倉庫玛界,不要在前面的關(guān)卡找文件讼积。
  • 通關(guān)操作:
git add README  

4. 第4關(guān)


  • 關(guān)卡描述:
“README”文件已經(jīng)被加入到暫存區(qū),現(xiàn)在提交它脚仔。  
  • 通關(guān)操作:
git commit -m "add README"  

5. 第5關(guān)


  • 關(guān)卡描述:
從“https://github.com/Gazler/cloneme”克隆倉庫勤众。
  • 通關(guān)操作:
git clone https://github.com/Gazler/cloneme  

6. 第6關(guān)


  • 關(guān)卡描述:
從“https://github.com/Gazler/cloneme”克隆倉庫到“my_cloned_repo”目錄。
  • 通關(guān)操作:
git clone https://github.com/Gazler/cloneme  my_cloned_repo  

7. 第7關(guān)


  • 關(guān)卡描述:
文本編輯器“vim”為所有文件創(chuàng)建以“.swp”結(jié)尾的文件鲤脏,這些文件當(dāng)前都被打開了们颜。我們不希望他們潛入到倉庫。讓倉庫忽略“.swp”文件猎醇。  
  • 通關(guān)操作:
//由于沒有裝vim窥突,直接用記事本打開“.gitignore”文件,在文件末尾換行并加上“*.swp”硫嘶。  

8. 第8關(guān)


  • 關(guān)卡描述:
注意一些文件以“.a”為擴(kuò)展名阻问。我們希望忽略這些文件除了“l(fā)ib.a”文件。    
  • 通關(guān)操作:
//由于沒有裝vim沦疾,直接用記事本打開“.gitignore”文件称近,在文件末尾換行并加上“*.a”,再換行哮塞,在文件末尾加上“!lib.a”刨秆。

9. 第9關(guān)


  • 關(guān)卡描述:
倉庫中有一些文件,其中一個(gè)沒有被跟蹤忆畅,它是哪個(gè)文件衡未。
  • 通關(guān)操作:
git status    

10. 第10關(guān)


  • 關(guān)卡描述:
倉庫中有一些文件。多少文件將要被提交家凯。 
  • 通關(guān)操作:
git status    

11. 第11關(guān)


  • 關(guān)卡描述:
一個(gè)文件從工作樹上面移除了缓醋,但是沒有從倉庫中移除。找到這個(gè)文件并移除它绊诲。  
  • 通關(guān)操作:
git status  
git add deleteme.rb  

12. 第12關(guān)


  • 關(guān)卡描述:
一個(gè)文件以外地加入到你的暫存區(qū)送粱,找出這個(gè)文件并將它從暫存區(qū)移除。  
*注意*:不要將它從文件系統(tǒng)中移除驯镊,僅僅將它git中移除葫督。
  • 通關(guān)操作:
git status  
git rm --cached deleteme.rb    

13. 第13關(guān)


  • 關(guān)卡描述:
你做了一些修改竭鞍,并且向稍后再它們上面工作。你應(yīng)該保存它們橄镜,但是不提交它們偎快。    
  • 通關(guān)操作:
git stash    

14. 第14關(guān)


  • 關(guān)卡描述:
我們有一個(gè)名為“oldfile.txt”的文件。我們想要將它重命名為“newfile.txt”并保存該修改洽胶。    
  • 通關(guān)操作:
git mv oldfile.txt newfile.txt  

15. 第15關(guān)


  • 關(guān)卡描述:
你添加了一些文件到你的倉庫晒夹,但現(xiàn)在知道你的項(xiàng)目需要進(jìn)行調(diào)整。創(chuàng)建一個(gè)新的文件夾命名為“src”,使用git將所有的".html"文件到該文件夾中姊氓。
  • 通關(guān)操作:
git mv about.html contact.html index.html src    

16. 第16關(guān)


  • 關(guān)卡描述:
你將要尋找最新提交的哈希丐怯,為此你將研究該倉庫的日志。  
  • 通關(guān)操作:
git log   

17. 第17關(guān)


  • 關(guān)卡描述:
我們有一個(gè)git倉庫翔横,并且我們想用“new_tags”來標(biāo)記當(dāng)前的提交读跷。  
  • 通關(guān)操作:
git tag "new_tag"

18. 第18關(guān)


  • 關(guān)卡描述:
倉庫中有一些標(biāo)記沒有被推送到遠(yuǎn)程倉庫,現(xiàn)在推送它們禾唁。  
  • 通關(guān)操作:
git push --tags origin master    

19. 第19關(guān)


  • 關(guān)卡描述:
“README”文件被提交了效览,但是“forgotten_file.rb”文件好像忘了提交。添加這個(gè)文件荡短,并改正上次提交使之包含該文件丐枉。
  • 通關(guān)操作:
git add forgotten_file.rb   
git commit --amend -m "改正后提交"

20. 第20關(guān)


  • 關(guān)卡描述:
用未來的時(shí)間日期(比如明天)來提交改變。 
  • 通關(guān)操作:
git commit --date=06.13.2016T09:00:00 -m "指定提交時(shí)間為2016年6月13日9點(diǎn)整"

21. 第21關(guān)


  • 關(guān)卡描述:
有兩個(gè)文件要提交掘托,目標(biāo)是將每個(gè)文件添加為單獨(dú)提交瘦锹,但意外地兩個(gè)文件都被添加到暫存區(qū)了。用“reset”命令將“to_commit_second.rb”文件從暫存區(qū)移除(不做提交操作)闪盔。  
  • 通關(guān)操作:
git reset HEAD to_commit_second.rb  

22. 第22關(guān)


  • 關(guān)卡描述:
你提交太快了⊥湓海現(xiàn)在你要撤消最后一次提交,同時(shí)保持索引锭沟。 
  • 通關(guān)操作:
git reset --soft HEAD~1  

23. 第23關(guān)


  • 關(guān)卡描述:
文件已經(jīng)被修改了抽兆,但是你不想保存該修改。從最后一次提交中檢出“config.rb”文件族淮。    
  • 通關(guān)操作:
git checkout config.rb  

24. 第24關(guān)


  • 關(guān)卡描述:
項(xiàng)目有一個(gè)遠(yuǎn)程倉庫,找到它凭涂。  
  • 通關(guān)操作:
git remote -v    

25. 第25關(guān)


  • 關(guān)卡描述:
遠(yuǎn)程倉庫有一個(gè)與之關(guān)聯(lián)的url祝辣。輸入遠(yuǎn)程倉庫“remote_location” 的url。  
  • 通關(guān)操作:
git remote -v    

26. 第26關(guān)


  • 關(guān)卡描述:
你需要從“origin”倉庫拉下改變到本地倉庫切油。    
  • 通關(guān)操作:
git pull origin master  

27. 第27關(guān)


  • 關(guān)卡描述:
添加一個(gè)url為“https://github.com/githug/githug”的遠(yuǎn)程倉庫蝙斜,并為該遠(yuǎn)程倉庫命名為“origin”。  
  • 通關(guān)操作:
git remote add origin https://github.com/githug/githug   

28. 第28關(guān)


  • 關(guān)卡描述:
你的本地“master”分支與遠(yuǎn)程倉庫“origin”的“master” 分支不一致澎胡,請用遠(yuǎn)程倉庫“origin”的“master” 分支來改變你的提交孕荠,并將提交推送到遠(yuǎn)程倉庫娩鹉。  
  • 通關(guān)操作:
git rebase origin/master  
git push origin master  

29. 第29關(guān)


  • 關(guān)卡描述:
自最后一次提交后,“app.rb”文件發(fā)生了一些改變稚伍。找出該文件那些行被改變了弯予。  
  • 通關(guān)操作:
git diff  

30. 第30關(guān)


  • 關(guān)卡描述:
有人將密碼放進(jìn)了“config.rb”文件中,找出是誰个曙。  
  • 通關(guān)操作:
git blame config.rb   

31. 第31關(guān)


  • 關(guān)卡描述:
有一個(gè)新的目錄“git_hug”被創(chuàng)建了锈嫩,在它里面初始化一個(gè)倉庫  
  • 通關(guān)操作:
git init  

32. 第32關(guān)


  • 關(guān)卡描述:
你想在一段可能打破一些東西的代碼上工作,創(chuàng)建一個(gè)“test_code”分支垦搬。    
  • 通關(guān)操作:
git branch test_code  

33. 第33關(guān)


  • 關(guān)卡描述:
你需要在“1.2”版本的應(yīng)用程序上修復(fù)一個(gè)bug呼寸。檢出“v1.2”標(biāo)記。  
  • 通關(guān)操作:
git checkout v1.2   

34. 第34關(guān)


  • 關(guān)卡描述:
你需要在“1.2”版本的應(yīng)用程序上修復(fù)一個(gè)bug猴贰。檢出“v1.2”標(biāo)記(注意:有一個(gè)名為“v1.2”的分支)对雪。  
  • 通關(guān)操作:
git checkout tags/v1.2  

35. 第35關(guān)


  • 關(guān)卡描述:
在前一個(gè)提交你忘了創(chuàng)建分支,并在該分支上進(jìn)行提交操作米绕。在最后一次提交前創(chuàng)建一個(gè)名為“test_branch”的分支瑟捣。    
  • 通關(guān)操作:
git branch test_branch HEAD~1  

36. 第36關(guān)


  • 關(guān)卡描述:
在你的項(xiàng)目中創(chuàng)建了太多的分支。有一個(gè)舊的名為“delete_me”的分支义郑,你應(yīng)該刪除它蝶柿。  
  • 通關(guān)操作:
git branch -d delete_me    

37. 第37關(guān)


  • 關(guān)卡描述:
在本地分支上你做了一些改變,并且想共享它非驮,但是不準(zhǔn)備將它合并到“master”分支上交汤。  
  • 通關(guān)操作:
git push origin test_branch:test_branch  

38. 第38關(guān)


  • 關(guān)卡描述:
在“feature”分支上有一個(gè)文件,讓我們將它合并到“master”分支上劫笙。  
  • 通關(guān)操作:
git merge feature  

39. 第39關(guān)


  • 關(guān)卡描述:
好像有一個(gè)新的分支被推送到了遠(yuǎn)程倉庫助琐。得到與本地倉庫的改變,但是不合并它們益兄。  
  • 通關(guān)操作:
git fetch origin   

40. 第40關(guān)


  • 關(guān)卡描述:
我們用“git rebase”工作流與“feature”分支準(zhǔn)備進(jìn)入“master”分支燕垃。將“feature”分支上的改變合并到“master”上。  
  • 通關(guān)操作:
git rebase master feature     

41. 第41關(guān)


  • 關(guān)卡描述:
優(yōu)化你的倉庫是如何包裝的允华,確保多余的包被刪除圈浇。
  • 通關(guān)操作:
git repack -d  

42. 第42關(guān)


  • 關(guān)卡描述:
你的新功能是不值得花時(shí)間的,你將要?jiǎng)h除它靴寂。但是它有一個(gè)提交填充了“README”文件磷蜀,你想要將這個(gè)提交同樣應(yīng)用到“master”分支上。  
  • 通關(guān)操作:
git log --all  
git cherry-pick ca32a6dac7b6f97975edbe19a4296c2ee7682f68    


43. 第43關(guān)


  • 關(guān)卡描述:
你項(xiàng)目的截止日期快到了百炬,你想評估你的代碼中還有多少“TODO”剩下褐隆。  
  • 通關(guān)操作:
git grep TODO    

44. 第44關(guān)


  • 關(guān)卡描述:
改正你第一次(非根)提交信息中的錯(cuò)誤。    
  • 通關(guān)操作:
git log  
git rebase -i a3d1ecb  




45. 第45關(guān)


  • 關(guān)卡描述:
你做了幾次提交剖踊,但是想將這些修改都合并到一個(gè)提交中庶弃。  
  • 通關(guān)操作:
git log  
git rebase -i 9760312    




46. 第46關(guān)


  • 關(guān)卡描述:
合并“l(fā)ong-feature-branch”分支中所有的提交到一個(gè)提交中衫贬。  
  • 通關(guān)操作:
git merge --squash long-feature-branch  
git commit -m "merge squash"  

47. 第47關(guān)


  • 關(guān)卡描述:
你做了幾次提交,但是順序錯(cuò)了歇攻。請為你的提交重新排序固惯。    
  • 通關(guān)操作:
git log  
git rebase -i b49d328  
git log  



48. 第48關(guān)


  • 關(guān)卡描述:
一個(gè)bug在某個(gè)地方被引進(jìn),你知道運(yùn)行“ruby prog.rb 5”應(yīng)該輸出“15”掉伏。你同樣可以運(yùn)行“make test”缝呕。進(jìn)入bug的提交的哈希的前7個(gè)字母是什么。  
  • 通關(guān)操作:
git log  
git bisect start master f608824  
git bisect run make test  

PS:雖然操作正確斧散,也找到了錯(cuò)誤的提交供常,但是卻不能通過本關(guān),應(yīng)該是沒有“make”命令的原因鸡捐。直接利用“githug reset stage_lines”調(diào)到第49關(guān)栈暇,之后即使闖過了第49關(guān)進(jìn)入下一關(guān)時(shí)還是會(huì)進(jìn)入第48關(guān),所以第49關(guān)及以后箍镜,都需要通過“githug reset 關(guān)卡名”來進(jìn)入指定關(guān)卡源祈。


49. 第49關(guān)


  • 關(guān)卡描述:
你在一個(gè)單獨(dú)的文件里做了一些修改,這些修改屬于兩個(gè)功能色迂。但是這些修改都沒有被暫存香缺,暫存屬于第一個(gè)功能的修改。    
  • 通關(guān)操作:
git status  
git add feature.rb -p  
e  



50. 第50關(guān)


  • 關(guān)卡描述:
你一直在一個(gè)分支工作歇僧,被一個(gè)主要問題弄得心煩意亂图张,并且你忘了這個(gè)分支的名字。切換回那個(gè)分支诈悍。  
  • 通關(guān)操作:
git reflog  
git checkout solve_world_hunger  


51. 第51關(guān)


  • 關(guān)卡描述:
你做了多次提交祸轮,但是想要撤銷中間的提交。所有的提交已經(jīng)被推送侥钳,你不能改變現(xiàn)存的歷史适袜。  
  • 通關(guān)操作:
git log  
git revert  59f058e  
git log  



52. 第52關(guān)


  • 關(guān)卡描述:
你決定通過運(yùn)行“git reset --hard HEAD^”來刪除最新的一次提交(這是不明智的)。
稍后你改變了想法舷夺,你想要回滾那次提交苦酱。重新存儲(chǔ)被刪除的提交。  
  • 通關(guān)操作:
git reflog  
git checkout e185df9   


53. 第53關(guān)


  • 關(guān)卡描述:
你需要合并“mybranch”分支到當(dāng)前分支(“master”分支)给猾。  
但是“mybranch”分支中可能有一些錯(cuò)誤的改變躏啰,這可能引起沖突。  
解決合并中你遇到的沖突耙册,并完成合并操作。    
  • 通關(guān)操作:
git merge mybranch    
vim poem.txt  
git add poem.txt  
git commit -m "add poem.txt"  



54. 第54關(guān)


  • 關(guān)卡描述:
你想要將“https://github.com/jackmaney/githug-include-me”倉庫的文件放進(jìn)“./githug-include-me”目錄毫捣。  
這樣做详拙,不通過克隆倉庫或者復(fù)制遠(yuǎn)程倉庫文件到本地倉庫帝际。  
  • 通關(guān)操作:
git submodule add https://github.com/jackmaney/githug-include-me githug-include-me   

55. 第55關(guān)


  • 關(guān)卡描述:
這是最后一關(guān),目標(biāo)是通過在Github上發(fā)出一個(gè)pull request請求來為該倉庫做貢獻(xiàn)饶辙。  
注意這一關(guān)是被設(shè)計(jì)用來鼓勵(lì)你為Githug做有效的貢獻(xiàn)蹲诀,而不是用來測試你創(chuàng)建 pull request請求的能力。  
可以被接受的貢獻(xiàn)有關(guān)卡弃揽,bug修復(fù)脯爪,文檔改進(jìn)。   

更過精彩內(nèi)容盡在我的github倉庫:https://github.com/lavor-zl/Github-Git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矿微,一起剝皮案震驚了整個(gè)濱河市痕慢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涌矢,老刑警劉巖掖举,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異娜庇,居然都是意外死亡塔次,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門名秀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來励负,“玉大人,你說我怎么就攤上這事匕得〖逃埽” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵耗跛,是天一觀的道長裕照。 經(jīng)常有香客問我,道長调塌,這世上最難降的妖魔是什么晋南? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮羔砾,結(jié)果婚禮上负间,老公的妹妹穿的比我還像新娘。我一直安慰自己姜凄,他們只是感情好政溃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著态秧,像睡著了一般董虱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天愤诱,我揣著相機(jī)與錄音云头,去河邊找鬼。 笑死淫半,一個(gè)胖子當(dāng)著我的面吹牛溃槐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播科吭,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼昏滴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了对人?” 一聲冷哼從身側(cè)響起谣殊,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎规伐,沒想到半個(gè)月后蟹倾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猖闪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年鲜棠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片培慌。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡豁陆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吵护,到底是詐尸還是另有隱情盒音,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布馅而,位于F島的核電站祥诽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瓮恭。R本人自食惡果不足惜雄坪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屯蹦。 院中可真熱鬧维哈,春花似錦、人聲如沸登澜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脑蠕。三九已至购撼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背份招。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工切揭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锁摔。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像哼审,于是被迫代替她去往敵國和親谐腰。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容