1. git fetch 與 git pull
都是從遠程拉取代碼到本地,git fetch只是拉取到本地,git pull不僅拉取到本地還merge到本地分支中。所以git pull是git fetch與git merge的集合體。
2. git pull 與 git pull --rebase
git pull的默認行為是git fetch + git merge,
git pull --rebase則是git fetch + git rebase.
從目的來說,兩者沒差別,運行之后, 能獲得一樣的code base。但從版本管理角度,這兩者有各自的使用意義。對比來看,git merge多了一次提交--“合並提交”。git rebase則沒有。
git merge:
簡單來說,它把兩條不同分支歷史的所有提交合並成一條線,並在“末端”打個結,即生成一次合並提交。最后形成一條單一的提交線。
git rebase:
根據參數的不同,行為有些差別。但總的來說,它相當於把分叉的兩條歷史提交線中的一條,每一次提交都撿選出來, 在另一條提交線上提交。最后也形成一條單一的提交線。
表示把本地當前分支里的每個提交(commit)取消掉,並且把它們臨時 保存為補丁(patch)(這些補丁放到".git/rebase"目錄中),然后把本地當前分支更新 為最新的"origin"分支,最后把保存的這些補丁應用到本地當前分支上。
在rebase的過程中,也許會出現沖突(conflict). 在這種情況,Git會停止rebase並會讓你去解決 沖突;在解決完沖突后,用"git-add"命令去更新這些內容的索引(index), 然后,你無需執行 git-commit,只要執行:
$ git rebase --continue
這樣git會繼續應用(apply)余下的補丁。
在任何時候,你可以用--abort參數來終止rebase的行動,並且"mywork" 分支會回到rebase開始前的狀態。
$ git rebase --abort