如果使用 Git 的話,這 2 個指令可能每天都要用幾百遍。
相信絕大部分的人都會直接 pull,偶爾 fetch。但是這 2 個到底有什麼不同呢?

不打算讨論過多的理論,因為非常枯燥,并且知道了可能也是看得迷迷糊糊。下面就使用場景來說。
應該 Pull 是絕大部分的情況。
針對 Git 使用的是分支管理代碼,可以這樣了解,在你對你的分支進行 Pull 之前,Git 就會 fetch 一下,當然這個 Fetch 隻 Fetch 你的分支,如果你還需要看看其他的分支的話,那麼你最好執行下 Fetch 指令。
舉個栗子的使用場景,下面的流程可能是大部分人常用的流程。
你現在在處理你的分支稱為 ci,項目的主分支是 master。
很多情況你可能是直接 pull 你的分支 ci,在這個時候 fetch 是被執行了。如果你要檢視你本地 master 分支的話,那麼你切換分支後需要再 pull 一下。
如果你對整個項目 fetch 的話,你就不需要再 pull 了。
因為很多公司的項目規範中不允許對 master 直接送出修改,必須使用 PR 的方式合并到 master,如果你的公司沒有這個使用規範的話,那你就記得沒事多從 遠端 Master 合并下到你本地,沒事多 fetch 下吧。
可以了解的就是 fetch 就是把本地倉庫和遠端倉庫同步下,把遠端倉庫中的修改拉到你本地倉庫裡面來,但是不會做任何操作。
是以,通常的操作就是當你的分支 ci 裡面辛苦工作的時候,隻要不切換分支,你就大膽 pull 吧。
通常我們不是一個人工作,這個時候你遇到了一個非常困難的問題,幸好項目組裡面有個大神幫你改了。
這個時候他會把他修改的内容 Push 到你的分支 ci 裡面。
你需要看看這個大神改了什麼,你可以做是直接 pull 就好了,然後在送出日志中看看他改了什麼。
因為 pull 會涉及合并(merge)這個時候可能會出現沖突。
如果出現沖突的話,你就需要手動合并沖突後再送出。
這個使用場景是很多人都會遇到的。
通常 master 都是主分支,有些項目會有 dev ,或者不同的供 CI 的分支。
有時候這些分支上面的修改你需要合并到你正在開發的分支上。
這個時候你就可以使用 Pull from 遠端的分支到你本地了。在這個指令執行之前也會 fetch。
IJ 提供了 2 個選項,你可以選擇 Rebase 也可以選擇 Merge。
這個功能能夠讓你的分支和 Master 上的分支保持一緻,能夠避免在合并的時候出現很多意想不到的麻煩和沖突。
在 Pull 之前會執行 Fetch,但是這個 Fetch 可能隻 Fetch 你目前的分支。
如果你希望你的本地倉庫和遠端保持一緻的話,你就單獨執行下 Fetch ,避免在本地合并的時候丢資料。
在對項目從本地進行任何合并之前,記得都先 Fetch 下你的整個項目。
另外早上到公司後打開 IJ 在準備咖啡或者泡茶的時候,沒啥事的話就先 pull 下你的分支,然後 fetch 下整個項目,然後開始愉快的一天。
https://www.ossez.com/t/git-fetch-pull/13689