Git 時光之術
Git 可以說是比寫 code 還要重要的東西,現在的專案基本上都要共同協作,所以如何避免衝突,不在開發的時候發生災難,可以說是非常的重要,寫 code 寫不好可以問人,但 Git 不行的話可能連工作都沒有辦法一起 co-work 。
另外如果對
vim
還沒有很熟的話建議去多了解一下vim
的編輯、儲存、查尋方式,對你在使用 git 上會更加的得心應手。
Git 常用 commend line
git 起手式
在專案位置下初使化 git ,表示可開始用 git 來管理你的專案,此時專案中會出現一個隱藏資料夾 .git
,然而你在開發的過程中也一定會有你不想要推到 remote 的東西,這個時候你可以建立一個 .gitignore
的檔案,在裡面編寫你不想要上傳的文件 or 資料夾
1 | git init |
在來你需要對專案說,你是誰,所以把你的 email 和名稱和 git 說,因此在 git.config 裡面建立資訊
1 | git config --list # 查看你目前的 config 清單 |
clone 專案
開發其它的專案,透過 clone 的方式,把 .git 的檔案一起抓下來
1 | git clone [YOUR_PROJECT] |
加入 remote
1 | git remote -h # 查詢remote相關指令 |
切換遠端分支
首先你應該不會知道專案中所有的 br 叫什麼名稱,所以可透過
1 | git branch -a # 查看所有 local 遠端 br |
在確認完之後,在回到專案的位置上,進行切換分支
1 | git checkout -b [BRANCH_NAME] [origin/BRANCH_NAME] |
加入暫存區
把資料加入暫存區
1 | git add . # add all file stage |
取消加入暫存區
1 | git checkout |
加入本地儲存區
把資料加入本地儲存區,方法其實有很多種,但主要就是要把你的資料寫到 git 裡面,如果你所要寫的東很多的話,建議你可以用 vim
的方式去作編輯歐
1 | git commit # 會直接進到 vim IDE 中 |
退回本地儲存區
1 | git log # get commit id |
commit 訊息邏輯
- 以大寫開頭
- 以<動詞> + <受詞> + <內容> 的文法撰寫
- 內容不宜過長
- 內容需要據有代表性
stash
會使用它最常有的情境是,你開發到一半,但是 BOSS 請你趕快的去處理另一件是,這個時候你也還沒有到可下 commit 的時候,這個時候,可用 stash 把你開發的 code 先到一個地方,之後只要回來,在把東西 stash 回來便可繼續開發。
在 stash 之前建議先把所有的 code 放到暫區,因有時候我們是新建檔,直接 stash 的話新檔就會被遺留在,原本的 br 上面
1 git add .為了確保我們所寫的東西不要被分別放在不同的 stash list 裡面
暫時存現狀
1 | git stash save 'msg ...' |
顯示暫存清單
1 | git stash list |
回復暫清單,通當你會去看一下你的清單有什麼,然後確定是第幾個之後用 stash@{0}
的方式來還原你想的的暫存。
這裡的 0 是表示,你最一次 stash 起來的東西,1 的話就是倒數第二次的東西,依此類推
1 | git stash pop shash@{0} # 拿回最後一次 stash 的 code |
刪除暫檔
1 | git stash drop `<shash ID>` |
合併分之
通常在有規模的專案下面開發,比較不會用到 merge ,因為主要都是透過 lib 去發 merge request ,而不是自己在本地,就把 code merged 到其它的分支。
merge
1 | git merge [BRANCH_NAME] |
但是我們在拉分支的時候,其實就是常常在用 merge 的指令,只是被合併在一起了。
rebase
1 | git rebase [BRANCH_NAME] |
這兩個都是把 br 作合並的效果,但是 rebase 是直接把原本的分支合回到另一個 br 的分支上,變成一個,也就是說,有些 commit 你可能會沒有辦法在 tree 上面直接的看到,因為被合到另一個 tree 上面了
刪除 branch
Coming soon …
遠端數據庫
fetch
主要只執行拉 code 的動作,但它不會把 code 和你現在的 br 進行合併,所以執行完後你是會在 HEAD
上面的
1 | git fetch # 把你在遠端的 br 拉下來 |
pull
那 pull 的這個動作,就是我們把 fetch + merge 的動作一起作完,把 code 拉下來,然後 merge 到你現在的 br 中
1 | git pull # git fetch + git merge |
push
把你所 commit 好的的檔案往上傳到 remote 端,但是需先確認是否已設定好 origin 的 remote 位置
1 | git push origin [BRANCH_NAME] |
tag
若要添加標示標籤,可以在 tag 命令加上 -a 參數執行,執行後會啟動編輯器,請輸入要給予的註解。也可以用 -am 參數來直接添加註解。
1 | git tag -a [TAG_NAME] |
在 HEAD 指向的提交裡增加名為 [TAG_NAME]
的標籤,請執行以下的命令。
1 | git tag -am 'msg...' [TAG_NAME] |
Git Bisect
希望你一輩子都不要用到這個東西。
1 | git bisect start [BAD_COMMIT] [GOOD_COMMIT] |
fork 專案
在 github
選擇 fork ,需在把你的 remote 專案名稱修正,因為通常 origin 指的是自己的開發 remote。然後在把 fork 的 repositories 設定到你的 origin 裡面。
確認 remote 的名稱 ⇒ 修正名稱 ⇒ 加入新的 fork repositories ⇒ 確認 remote 的名稱
Git alais
Coming soon …
檢查 git
下列這些指令是在你開發到一半,想要回去查東西時很用的指令
1 | git status # 看一下還有多少東西沒有進暫存區 |