git fetch就是將遠端的資料update 到local端,簡單的說就是讓local端知道遠端最新的位置是在哪
舉個例子 如下圖
先不管server端的部分,
origin/hello2 為遠端的本地參照位置,hello2為目前實際的位置。
假設 遠端原本只有 aaa bbb ccc三個commit
然後user A和B 皆使用 git clone , 他們的origin/hello2都會是在 ccc的位置,
hello2也會在ccc的位置
假設user B commit 並 push 了 ddd,這時user A的 origin/hello2依然是在 ccc
那 user A 該如何更新origin/hello2到 ddd呢?
user A只需要使用 git fetch origin hello2
這樣 user A的 origin/hello2就會更新到 ddd的位置
fetch 會去更新origin/hello2(本地參照)
解釋完git fetch之後,要解釋git pull就相對簡單許多
甚麼是git pull
git pull 實際作用為 git fetch + git merge
舉個例子
假設目前在遠端上面有人 commit 並push了 aaa 和 bbb
而我在本地端commit 了 ccc的功能
假設打入指令 git fetch origin hello2 這時會將origin/hello2 更新到bbb的位置
接著使用git merge origin hello2就會變成 如下圖
然而這個結果跟直接使用 git pull的結果是一樣的
git pull 不只會更新本地參照還會自動進行merge branch。
比較安全的用法
從server上拉資料之前
總是先使用git fetch更新本地參照
接著先確認是否有其他的分支
若無其他分支,如下圖 則使用git pull fast forward到 Origin/hello2
若有其他分支,如下圖
則檢查是否有需要merge 若有則使用 git merge。
結論
git fetch是相對較安全的做法,假設想要知道server上最新的版本但是還不想本地端還有一些功能還沒開發完,或是基於某些原因還不想merge的話可以使用git fetch,這樣本地只會取得server上最新版本但是並不會merge到本地端,
假設使用git pull 代表本地端功能已經開發完成可以進行合併,使用git pull就會直接將本地端跟server上做合併的動作。
沒有留言:
張貼留言