感謝優達的免費課程,還有網絡上熱心的網友,尤其是廖雪峰老師的教程幫我填補好多空缺。這是三個筆記中最后一個了,我的課外學習要先告一段落了,考驗要緊啊,還沒咋復習呢。心里好慌,希望自己能耐得住性子坐下來復習。加油!
一定要從自己的賬號下clone倉庫,這樣你才能推送修改。如果從原作者的倉庫地址克隆,因為沒有權限,你將不能推送修改。所以為此必須在GitHub上新建一個空的倉庫。使用它來保存其他人的倉庫,並實現與本地的交互。每次更新GitHub時,更新的是一個分支,他會檢查該更新所有的提交,如果GitHub中存在就不需要再次上傳,如果沒有則會提交。
在創建一個新的GitHub倉庫時,會有選項“使用README來初始化倉庫”:如果這完全是一個新的倉庫並且本地也沒有任何相關內容的話,建議使用該選項,他會初始化一個commit。否則你無法克隆一個空的倉庫。在GitHub的遠程倉庫中可以直接創建純文本文件。
互聯設置:因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。
git config --global user.name "Your Name" git config --global user.email "email@example.com"
注意:git config命令的--global參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
查看和創建遠程倉庫:git remote。
- 不加參數:查看所有遠程倉庫。
- git remote add name HTTPS:添加遠程倉庫,name可以是任何字段,用來在本地指代GitHub中的遠程倉庫。如果只有一個遠程倉庫,建議使用origin。最后加上該庫的https地址。
- git remote -v:輸出詳細信息。
更新遠程倉庫:
git push 遠程倉庫名 本地分支名
復制GitHub上其他人的庫
對於GitHub上想要修改的倉庫,可以使用fork按鈕將其復制到自己的賬戶中,GitHub會自動給出原文件鏈接。想要對其進行修改,除非改動非常小,否則都需要clone到本地,使用git clone URL克隆時,git會自動地創建一個遠程倉庫並指向克隆的原始倉庫。可以食用git remote -v驗證。這里的URL是fork的主頁URL。
圖一從GitHub上克隆到本地
在自己創建一個庫的同時還有合作伙伴的時候,可以選用“合作者“一同開發,不過主人還是有主導權的,在setting選項卡中,有collaboration選項可以添加不同的合作者。
git會把你的所有遠程分支在本地保存一個副本,他會包含最后一次拉取、推送時分支的狀態。遠程分支的本地副本以“遠程倉庫名/分支名”為名,與遠程推送儲存在一起。
更新遠程分支本地副本
git fetch:更新遠程分支的本地副本,同時實際的本地版本不發生變化。
從遠程倉庫拉取最新的狀態
git pull:從遠程倉庫拉取最新的狀態,並把它與本地的分支進行合並。
合並機制
這本來是要在上一篇中講的,上一篇內容太多了,正好這里也有合並的內容,就放在了這里。
快速合並:你要git默認的合並方式,判斷依據是與本分支合並的分支是否是本分支的祖先。如果是這種情況,后面的分支會有前面的分支所有內容,沒有必要再產生一個標簽,只要把祖先的標簽移到最后即可。但是即使是使用快速合並,在GitHub上也會產生一個commit。也可以使用強制非快速合並,合並分支時,加上--no-ff參數就可以用普通模式合並,合並后的歷史有分支,能看出來曾經做過合並,而fast forward合並就看不出來曾經做過合並。所以建議使用非快速合並。
圖二快速合並舉例
分支策略
在實際開發中,我們應該按照幾個基本原則進行分支管理:
首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;那在哪干活呢?干活都在其他分支上如:easy-mode,也就是說,easy-mode分支是不穩定的,到某個時候,比如1.0版本發布時,再把easy-mode分支合並到master上,在master分支發布1.0版本;你和你的小伙伴們每個人都在easy-mode分支上干活,每個人都有自己的分支,時不時地往easy-mode分支上合並就可以了。
拉取請求
如果在本地新建一個分支並在其上進行修改,將其推送到GitHub上時也會同樣創建一個分支。如果想讓其他人更改使用“pull request”拉取請求,即別人可以提交修改,你可以決定是否將其合並到master分支上。設置“pull request”時要注意,GitHub默認是將新分支合並到最原始的倉庫中,如果不想一定要更改。拉取請求其實就是合並請求,合作者把想合並到主分支的文本提交到GitHub上,如果主人同意就可以合並到主分支上了。
圖三更改請求提交位置
設置完之后,會在倉庫主頁中出現pull request選項卡,新的拉取請求在其中,選擇相應的請求,會看到最新的提交,你可以點開看到更改的內容。
圖四拉取請求位置
如果有多個pull request,並且他們之間有沖突的話,一般的解決方法是先先判斷哪個請求要合並,不需要合並的請求直接刪除,減少沖突。如果兩個都需要的合並產生沖突可以先合並一個,刪除該分支,然后在本地電腦上解決沖突,並將解決方案與主分支(想要被合並的分支)合並到解決方案所在地分支中,然后將該分支push到GitHub中,用來更新“pull request”。使用“git pull 遠程倉庫名 分支名”來拉取遠程倉庫中相應的分支。
不要直接將修改合並到主分支然后push,這樣會導致合作者無法看到你的更改。
如果在你修改本地倉庫添加新內容時,原作者修改了他的文件導致你無法與最新版本進行合並,可以先創建一個指向源庫的遠程倉庫一般叫做upstream,在本地解決沖突,然后將其push到自己的GitHub上再次提出pull request
圖六 git中一些常用概念以及方法的關系
以下內容都是后加的。
凍結現場命令git stash
如果遇到突發情況,需要立刻去其他分支上處理問題,但是有頭上的工作還沒做完無法commit,這時候可以使用命令git stash可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作。
使用git stash命令后,用git status查看工作區,就是干凈的(除非有沒有被Git管理的文件),因此可以放心地創建分支來修復bug。
用git stash list命令找到儲藏的工作現場,需要恢復一下,有兩個辦法:
- 一是用git stash apply恢復,但是恢復后,stash內容並不刪除,你需要用git stash drop來刪除;
- 另一種方式是用git stash pop,恢復的同時把stash內容也刪了,但是只能是只有一個stash文件的情況下使用。
你可以多次stash,恢復的時候,先用git stash list查看,然后恢復指定的stash,用命令
圖七 git stash命令使用情況
標簽tag
這東西沒有聽老師講過,但是看了廖雪峰老師的教程后明白了,其實很簡單,給個原鏈接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013762144381812a168659b3dd4610b4229d81de5056cc000
標簽說白了就是一個代號罷了,為了簡化commit ID。
使用也非常簡單添加標簽使用命令git tag <name>。通常會默認放在該分支的最新提交上。git tag -a <tagname> -m "blablabla..."可以指定標簽信息,git tag可以查看所有標簽。可以使用git tag <name> commitID給相應ID的commit補上一個標簽。
因為創建的標簽都只存儲在本地,不會自動推送到遠程。所以,打錯的標簽可以在本地安全刪除使用命令:git tag –d <name>
命令git push origin <tagname>可以推送一個本地標簽到遠程。