寫(xiě)這篇blog的初衷是否彩,在帶教新人使用sourcetree+gitlab管理腳本時(shí)讼昆,發(fā)現(xiàn)自己磕磕巴巴無(wú)力解釋清楚Git是個(gè)什么鬼蒙袍,因此決定系統(tǒng)學(xué)習(xí)并以文章的形式整理下助消化。
拜讀了廖雪峰的《Git教程》玄坦,非常淺顯易懂血筑,也可以按目錄檢索章節(jié)內(nèi)容,耗費(fèi)一小時(shí)左右閱讀時(shí)間就能把Git的使用安排得明明白白煎楣。所以這篇文章并不再搬運(yùn)或者是再詮釋其中的內(nèi)容豺总,而是按我個(gè)人的思考和閱讀習(xí)慣,寫(xiě)一個(gè)濃縮簡(jiǎn)短版的使用指南择懂。
Why Git
Git 至少解決了版本管理和多人協(xié)作兩個(gè)問(wèn)題园欣。
- 版本管理:相當(dāng)于后悔藥了,在關(guān)鍵節(jié)點(diǎn)及時(shí)保存和提交版本休蟹,寫(xiě)好版本注釋沸枯,就能任意返回之前的某一個(gè)版本。不過(guò)分析師寫(xiě)的SQL一般都不復(fù)雜赂弓,所以不太需要多個(gè)版本绑榴。
How it Works
工作區(qū) -> 暫存區(qū):通過(guò)git add <filename>
提交工作區(qū)的文件修改到版本庫(kù)的暫存區(qū)。暫存區(qū)的目的就是跟蹤修改盈魁。
- 如果要撤銷工作區(qū)的修改翔怎,通過(guò)
git checkout -- <filename>
使其退回到已添加到暫存區(qū)的狀態(tài),如果文件未添加到暫存區(qū),則撤銷退回到和版本庫(kù)一樣的狀態(tài)赤套。
暫存區(qū) -> 分支:通過(guò)git commit -m <message>
提交到暫存區(qū)的所有修改到master或其他的分支上飘痛。
如果未提交版本,要撤銷暫存區(qū)的提交容握,通過(guò)
git reset Head <filename>
把暫存區(qū)的修改返回到工作區(qū)宣脉。如果已提交版本,通過(guò)
git reset --hard Head^
返回上一個(gè)版本剔氏,或通過(guò)git reset --hard <commit id>
返回之前的任一版本塑猖、或重回“未來(lái)”的版本。<commit id>
可通過(guò)git log
和git reflog
來(lái)查詢提交歷史和命令歷史谈跛。emmmm傳說(shuō)這個(gè)命令不要輕易用...
Branch
創(chuàng)建分支:通過(guò)git checkout -b dev
創(chuàng)建并切換到dev分支上羊苟。以上語(yǔ)句實(shí)際可拆分成兩句。
-
git branch <branchname>
創(chuàng)建一個(gè)分支 -
git checkout <branchname>
切換到一個(gè)分支上感憾,有別于撤銷工作區(qū)修改的語(yǔ)句`git checkout -- <filename>蜡励,注意區(qū)分
合并分支:通過(guò)git merge <branchname>
合并某分支到當(dāng)前分支上
解決沖突:遇到版本沖突的無(wú)法自動(dòng)合并的,需要手動(dòng)解決沖突阻桅,重新提交修改凉倚。多人協(xié)作中,可按以下步驟嘗試:
- 先使用
git push origin <branchname>
推送自己的修改 - 如推送失敗鳍刷,說(shuō)明遠(yuǎn)程分支比本地分支更新占遥,需要用
git pull
拉取并合并 - 如合并失敗俯抖,需要手動(dòng)解決沖突输瓜,再次使用
git push origin <branchname>
推送