前言
如大家所知,Git是一個免費且開源的分散式版本控制系統,它能自動記錄每次檔案的改動,還可以讓開發者協作編輯。如果想檢視某次改動,只需要在軟體裡瞄一眼就可以。現在大部分公司都是使用git作為版本控制工具,這也是我們每天都要打交道的工具。那麼,你能擼順git這隻貓嗎?
git基本命令
git init
git add
作用就是將需要提交的程式碼從工作區新增到暫存區,就是告訴git系統,要提交哪些檔案,之後就可以使用git commit命令進行提交了。
Git commit
主要是將暫存區裡的改動給提交到本地的版本庫。每次使用git commit命令我們都會在本地版本庫生成一個40位的雜湊值,這個雜湊值也叫commit-id
Git push
在使用git commit命令將修改從暫存區提交到本地版本庫後,只剩下最後一步將本地版本庫的分支推送到遠端伺服器上對應的分支了。git push的一般形式為 git push ,例如 git push origin master:refs/for/master ,即是將本地的master分支推送到遠端主機origin上的對應master分支, origin 是遠端主機名。第一個master是本地分支名,第二個master是遠端分支名。
git pull
git fetch
git branch
建立分支
刪除分支
檢視分支
git提交規範
commit message應該清晰明瞭,說明本次提交的目的,以AngularJS的提交規範為例講一下git提交規範。每次提交Commit message都包括三個部分:header,body 和 footer。
其中header是必需的,body和footer可以省略。建議任何一行都不要超過72個字元(或100個字元),避免自動換行影響美觀。
Header
Header部分只有一行,包括三個欄位:type(必需)、scope(可選)和subject(必需)。
type
用於說明commit的類別,只允許使用下面7個標識。
feat:新功能(feature)
fix:修補bug
docs:文件(documentation)
style:格式(不影響程式碼執行的變動)
refactor:重構(即不是新增功能,也不是修改bug的程式碼變動)
test:增加測試
chore:構建過程或輔助工具的變動
scope
scope用於說明commit影響的範圍,比如資料層、控制層、檢視層等等,或者寫明影響的功能模組,以便快速定位。如果你的修改影響了不止一個scope,你可以使用*代替。
subject
subject是本次提交的簡短描述,應該像一個文章標題一樣,不要過長。
Body
Body部分是對本次commit的詳細描述,羅列程式碼功能,可以分成多行。body是可選的,subject描述的足夠清楚的話body可以不用寫。
footer
描述與本次提交相關聯的break change或issue。適用於以下情況:
1。不相容變動:如果當前程式碼與上一個版本不相容,則Footer部分以BREAKING CHANGE開頭,後面是對變動的描述、以及變動理由和遷移方法。
2。關閉 Issue:如果當前commit針對某個issue,那麼可以在Footer部分關閉這個issue 。
常見問題
修改提交git賬號
首次用git提交某次修改時會讓你輸入對應的name和email,這會作為當前節點的的全域性配置,在後續的提交都是用的這個賬號。若是需要修改賬號可用以下操作:
透過命令git config ——list檢視當前的git相關配置,找到user。name 和user。email,修改即可。
修改全域性(修改全域性預設值)name和email,透過以下命令:
只修改當前project的name和email,在當前project目錄下透過命令:
撤消本地提交
hard選項會重置working tree以及索引,造成所有的修改全部丟失。
改錯程式碼分支
日常開發中可能會出現當開發了完功能準備提交程式碼時發現修改在了錯誤的分支上面,那麼怎麼處理呢?
還未commit的情況:
已經commit的情況:
git處理衝突
當拉取下來的檔案與本地修改的檔案有衝突,先提交你的改變,或者先將你的改變暫時儲存起來
找到合併後破壞了某些內容的提交
跟蹤在大型合併之後引入了bug的提交非常耗時。git有個二進位制搜尋工具git-bisect。首先執行初始設定:
再次執行spec檔案並提交相應的“good”或“bad”標記。
總結
本文總結了工作中使用較為高頻的Git命令的用法,以及git的提交規範,常見問題的處理。在我們的日常開發中少不了對Git的使用,我們要像擼貓一樣,擼的順手,漂亮!