使用git pull時,git會將本機的repository和遠端的repository做merge,當merge數量一多git的樹狀圖就會非常混亂。
為了避免這樣的狀況,當我們修改小地方時,就不要再讓repository merge一次,透過rebase讓樹狀不會亂長
指令:
git pull --rebase
rebase會做四件事
- 1.暫存一份本機repository從上次pull之後再修改的部份
- 2.將本機repository rollback到上一次pull的狀況
- 3.套用遠端的變更
- 4.套用暫存下來的本地變更
rebase branch
git rebase <branch>
當遇到檔案內容衝突時,修改並git add(不要commit)之後,要再下以下指令繼續rebase:
git rebase --continue
如果想要預設pull就使用rebase,可以修改.git/config
[branch "master"] remote = origin merge = refs/heads/master #master branch 預設使用rebase rebase = true [branch] #所有branch預設都用rebase autosetuprebase = always
另外rebase也可以透過Interactive mode自動更改commit的順序及內容
#該commit之後的commit都要重新整理 git rebase -i <commit_hash> # 可以選擇的option # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # 若是使用edit,記得修改完檔案後git add(不要commit)並再下git rebase --continue # 設定上出問題,可以到.git/rebase-merge/git-rebase-todo,並再重下git rebase