查了一些資源,但有些看了反而混淆視聽,把我學習過程中有幫助記下來。
0.高級字典 – Pro Git繁中版
http://iissnan.com/progit/index.zh-tw.html
1.快速抓到git概念跟使用git的方法
http://tech.marsw.tw/blog/2013/08/16/git-notes-github
2.Fork別人的東西
幽默的入門資源:http://site.douban.com/196781/widget/notes/12161495/note/269163206/
分散式工作流程基礎:http://iissnan.com/progit/html/zh-tw/ch5_0.html
3. 互動式的git學習工具
http://pcottle.github.io/learnGitBranching/
現在會用到的指令
1.要把東西push到repository
git add <files> git commit -m "comment about this version" git push
2. 送出Pull Request
3. 遇到fork下來的origin/master跟origin/new-branch都比原本的repo還要後面,但卻想送PR
事情是這樣,當初fork了一份透明物體辨識的code,然後因為我自己要加上新功能,所以就在自己的master一直commit。後來想寫一份演算法的教學並送出PR,但問題是,我的master中有一堆我不想要推回原本repo的code,所以就很尷尬,因為就算我在電腦的lcoal端用rebase改回去,要push的時候也會被抱怨說跟網站上的不同步。研究了一陣子,發現一個解法。
先到電腦的local端,讓電腦端跟origin/master跟origin/new-branch同步,所以電腦端會有master跟new-branch。接下來可以做
git checkout master //切換到master這個branch上 git branch -v //確認自己的branch有哪些跟自己在哪個branch git rebase -i //修改commit歷史,把本地端的master復原成原本的repo git branch tutorial //開一個新的branch,這個branch的進度跟原本的repo是一樣的 git push origin tutorial //把這個新branch推到github網站上,那之後在這個branch的修改就可以發送PR了 .... //一連串的修改跟新增檔案等等 git push origin tutorial //只把這個branch的修改推到網站上,這樣就不會造成master那邊的衝突
雖然問題是解決了,但感覺還是不太合理,因為沒道理不能把master復原成幾個commit之前,只是我目前的作法都是在本地端改完才push上去,然後就會被抱怨說會遺失掉網站上的版本歷史,我想一定還有什麼是我不知道的,有機會學到再補上來吧。
4.送出PR之後,作者又修改了某些東西,怎麼直接修改PR (謝謝林承澤大大熱心指導QQ)
這次的case也是因為幫ORK的透明物體辨識寫演算法的教學,所以我就送了一個PR。接下來作者跟我說,他要把原本的repo修改一下,方便未來寫教學可以很容易擴充。所以情況變成我的origin/tutorial做了a、也發了PR,而作者又做了b。那我該怎麼直接修改tutorial這個branch來讓PR自動更新呢?
git checkout tutorial git fetch ork (先把他做的b給抓下來) git rebase ork/master git rebase -i HEAD~2 在vi中把做了a的那個commit直接整行刪掉 & :wq some editing git commit git push origin tutorial -f (-f表示強制推上去,把origin/master修改成跟本地端一樣)
這麼做之後,PR就會神奇地自動更新了。這是因為我發的這個PR本質上就是比較origin:tutorial 跟 ork:master 的差別,所以只要我硬是把origin/tutorial更新完畢,PR就會自己更新。
附上PR的連結: