寫這篇blog的初衷是,在帶教新人使用sourcetree+gitlab管理腳本時(shí),發(fā)現(xiàn)自己磕磕巴巴無力解釋清楚Git是個(gè)什么鬼,因此決定系統(tǒng)學(xué)習(xí)并以文章的形式整理下助消化。
拜讀了廖雪峰的《Git教程》,非常淺顯易懂,也可以按目錄檢索章節(jié)內(nèi)容,耗費(fèi)一小時(shí)左右閱讀時(shí)間就能把Git的使用安排得明明白白。所以這篇文章并不再搬運(yùn)或者是再詮釋其中的內(nèi)容,而是按我個(gè)人的思考和閱讀習(xí)慣,寫一個(gè)濃縮簡短版的使用指南。
Why Git
Git 至少解決了版本管理和多人協(xié)作兩個(gè)問題。
- 版本管理:相當(dāng)于后悔藥了,在關(guān)鍵節(jié)點(diǎn)及時(shí)保存和提交版本,寫好版本注釋,就能任意返回之前的某一個(gè)版本。不過分析師寫的SQL一般都不復(fù)雜,所以不太需要多個(gè)版本。
How it Works

工作區(qū) -> 暫存區(qū):通過git add <filename>提交工作區(qū)的文件修改到版本庫的暫存區(qū)。暫存區(qū)的目的就是跟蹤修改。
- 如果要撤銷工作區(qū)的修改,通過
git checkout -- <filename>使其退回到已添加到暫存區(qū)的狀態(tài),如果文件未添加到暫存區(qū),則撤銷退回到和版本庫一樣的狀態(tài)。
暫存區(qū) -> 分支:通過git commit -m <message>提交到暫存區(qū)的所有修改到master或其他的分支上。
如果未提交版本,要撤銷暫存區(qū)的提交,通過
git reset Head <filename>把暫存區(qū)的修改返回到工作區(qū)。如果已提交版本,通過
git reset --hard Head^返回上一個(gè)版本,或通過git reset --hard <commit id>返回之前的任一版本、或重回“未來”的版本。<commit id>可通過git log和git reflog來查詢提交歷史和命令歷史。emmmm傳說這個(gè)命令不要輕易用...
Branch
創(chuàng)建分支:通過git checkout -b dev創(chuàng)建并切換到dev分支上。以上語句實(shí)際可拆分成兩句。
-
git branch <branchname>創(chuàng)建一個(gè)分支 -
git checkout <branchname>切換到一個(gè)分支上,有別于撤銷工作區(qū)修改的語句`git checkout -- <filename>,注意區(qū)分
合并分支:通過git merge <branchname>合并某分支到當(dāng)前分支上
解決沖突:遇到版本沖突的無法自動(dòng)合并的,需要手動(dòng)解決沖突,重新提交修改。多人協(xié)作中,可按以下步驟嘗試:
- 先使用
git push origin <branchname>推送自己的修改 - 如推送失敗,說明遠(yuǎn)程分支比本地分支更新,需要用
git pull拉取并合并 - 如合并失敗,需要手動(dòng)解決沖突,再次使用
git push origin <branchname>推送
