你不知道的一些git小技巧

使用git log來顯示branches, 標籤

$ git log --oneline --decorate
用git log來顯

diff只顯示有變動的部分, 不顯示整句

$ git diff --word-diff

簡短的狀態

$ git status -sb
初學者可以只打git status, 會出現比較多的提示

push分支並且自動追蹤

$ git push -u origin master
# pushes the "master" branch to "origin" remote and sets up tracking
這個行為能將本地的分支和遠端分支做連結, 之後只要打git pull或是git push, 有連結的分支都會自動更新.
不過git push的預設值也會將相同名字的本地分支push上去. 若不想要這樣的話,可以用
$ git config --global push.default tracking

追蹤一個別人分享的遠端分支

$ git checkout -t origin/feature
# creates and checks out "feature" branch that tracks "origin/feature"

若有其他人想分享一個他們工作中的分支, 而你必須要在本地建立一個分支來追蹤, 以方便一起編輯, 並且可以使用git push來新增自己做的改變

使用pull with rebase而不要merge

$ git pull --rebase

# e.g. if on branch "master": performs a `git fetch origin`,
# then `git rebase origin/master`

平常使用pull, 其實包含了fetch跟merge, 而merge又會被記錄到merge commit裡面, 我們預設這些紀錄應該是有意義的, 像是什麼功能被整合到release的分支裡. 但有時候, 跟很多人分工時, 大家會使用git pull然後又merge來merge去的, 這樣分支的圖很容易被一些比較不重要的小merge污染, 這時候用rebase就可以讓這些commit都維持在同一條直線上.
如果你要讓某條分支總是維持這樣的設定, 不想每次都加上--rebase的話, 可以這麼做
# make `git pull` on master always use rebase
$ git config branch.master.rebase true

若是要讓全部有追蹤的分支一起使用這個設定
# setup rebase for every tracking branch
$ git config --global branch.autosetuprebase always

看分支裡有哪些改變已經傳到遠端

# while on "feature" branch:
$ git cherry -v master

這功能可以檢查哪些commits使用過cherry-pick. 以這個例子就是比較現在所在的feature分支跟遠端的master有哪些改變. 若是(-)開頭就是兩邊都有, 若是(+)開頭, 就是遠端還沒有

留言