各位朋友們好。上一篇我們了解到了如何使用PUSH將代碼的新版本推送到遠端項目庫中。本篇我們將介紹如何將同事所新推送的代碼拉取(同步)到本地的項目庫中。另外,在介紹操作之後,我們也會提到通常我們會在什麼時間點使用這個操作。
本次操作我所使用的IntelliJ IDEA版本為 2022.3.2 (Community Edition),如果你發現使用了相同的版本但UI不一樣,請在settings中啟用new UI。
在Github上直接編輯提交新代碼版本
首先,為了使操作更易理解,所以我們需要先模擬一下同事的代碼提交操作。為了節省時間,我們直接在Github上編輯一下代碼並提交,使我們遠端項目庫代碼版本比我們的本地項目庫的代碼版本更新一些。
1.首先,在Github項目庫上,我們直接點擊我們要編輯的代碼檔案。

2.點擊【Edit this file】按鈕。此時畫面會進入編輯模式。

3.在編輯模式中隨意的輸入一些文字。在這裡,我在第二行輸入了【同事輸入的第二行字】以供辨別。

4.在下方有個【Commit changes】框,我們輸入這一次更新的主要目的和細節描述後,直接在下面點擊綠色的【Commit changes】按鈕以提交更新。

5.更新完後,我們已經可以在代碼檔案頁面中看到我們剛剛輸入的文字了。

同時,在項目頁面的檔案列表也已經可以看到我們剛剛在提交時輸入的提交說明,到這裡我們就完成了同事的代碼提交工作囉。

在IntelliJ IDEA進行Pull拉取(代碼同步)操作
回到IntelliJ IDEA介面。首先,我們先來看看目前遠端庫的代碼版本和本地庫的代碼版本差異。
1.在編輯介面中點擊滑鼠右鍵,選擇【Git→Fetch】更新項目庫的資訊快照。

2.在更新完成後,如果遠端的版本比我們本地的版本新,我們就可以在上方的Git分支快速切換按鈕中看到一個由右上到左下的藍色箭頭【↙】,這就表示目前本地的版本是可以被更新的。

3.接著我們在左下角點擊Git按鈕或是按下【Alt+9】打開Git工具視窗。

4.現在讓我們從Git工具視窗中的Log來看一下分支狀況。從記錄中我們可以看到【origin/main】遠端分支的版本是較【main】版本來得新的。

5.回到代碼編輯區,我們按下滑鼠右鍵,選擇【Git→Pull…】。

6.現在我們可以看到代碼已經更新了同事輸入的那一行字。同時,在分支記錄中我們也可以看到本地項目庫的版本已經和遠端項目庫的版本一致了。

到這裡,我們就完成了Pull操作囉。
為什麼在Pull動作執行前,我們需要先執行一次Commit操作
在本節,我們來談談一個良好的習慣,那就是在進行Pull這個動作前,我們通常會先將目前的開發工作告一段落並進行一次commit的提交操作。
因為在多人共同開發一個項目的情況下,同時有兩人以上在開發同一個檔案的情況是相當常見的,這也就造成了不同的開發人員同時修改了同一個位置的情況,也就是我們所說的代碼版本衝突。
為了能在發生這種狀況時,我們能夠快速有效的追蹤並解決衝突,在Pull前先將目前工作告一段落並進行一次Commit是一個很好的習慣,因為這樣我們可以更容易的知道我們所改的這一段和同事所改的這一段原因是什麼,而知道原因也就知道該怎麼去處理這一段代碼的衝突了。
另外,值得一提的是,目前在IntelliJ IDEA中如果代碼做了更動,但是在Pull前沒有先進行一次Commit的話,是無法進行Pull操作的,我們得到一個【Git Pull Failed】的失敗訊息。

而一旦我們進行了一次Commit, 當遠端的版本和我們目前的版本有衝突時,IntelliJ IDEA也會自動彈出衝突處理視窗,相當的防呆、方便。(有關代碼衝突視窗的操作,我們會在【衝突處理】的章節一起做說明。)

在日常工作中,什麼時間點我們會使用PULL操作
在本章的最後一節,我們來聊一下在日常工作中,我們會在什麼時間進行Pull操作呢?
第一個時間點:上班就座打開IntelliJ IDEA的第一件事就是Pull操作。
因為公司文化和遠端工作的原因,很有可能在我們離開工作的這一段時間有其它同事修改了代碼。如果我們能夠在編寫代碼開始前先進行Pull,就可以早點知道目前的代碼是不是有潛在的衝突存在,而可以先一步將有衝突的代碼處理完,避免代碼的衝突在開發的過程中進一步擴大而造成解決時的各種麻煩(包含了代碼複雜度或是人員溝通的困難)。
第二個時間點:當目前的功能開發告一段落時,先Commit,接著馬上先進行Pull操作。
在功能開發告一段落時,很有可能在開發這個功能的期間,代碼有被更動過。此時我們在Commit過後先進行一次Pull,可以提早發現代碼衝突提早處理。這樣可以確保我們進行Push提交到遠端庫前已經把所有問題解決而不用把問題拖延造成其它開發人員的困擾。
第三個時間點:下班前,將目前的工作Commit,接著馬上先進行Pull操作。
在下班前,儘管目前功能的開發尚未告一段落,但是我們還是會先進行一次Pull操作。原因同樣是因為在開發這個功能的期間,代碼有被更動過。即早發現衝突即早處理,這樣明天上班時就可以更快的開始功能開發的工作,心情也會好上許多。這裡別忘了,如果下班前進行的pull有發現衝突並處理完成時,要再補一個Commit提交喔。




