學習 Git (10) - Pull 與 Clone


Posted by Calon on 2022-06-04

下載同步更新 Pull

在協同合作時,專案進度有可能會比自己本地端的專案進度還前面,這時候我們可以用 git pull 來將遠端的進度拉回本地端更新,而在介紹 git pull 之前我們先來介紹 git fetch

Fetch 取得遠端資料庫進度

假設我們在別的地方更新了專案進度,並使用 git push 推上了 GitHub,這時我們本地端的進度和遠端資料庫的進度不一樣,這時我們可以使用 git fetch 將遠端資料庫的進度拉回來:

$ git fetch
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 2 (delta 0), reused 1 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 615 bytes | 615.00 KiB/s, done.
From github.com:calon719/test
   d38d93f..b36e354  master     -> origin/master

執行完後會返回一個 FETCH_HEAD,我們可以用 git log 來檢視一下 FETCH_HEAD:

git log --oneline -p FETCH_HEAD
bf020f5 (origin/master) Create newREADME.md
diff --git a/newREADME.md b/newREADME.md
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/newREADME.md
@@ -0,0 +1 @@
+test
5ba01be (HEAD -> master) 初始版本
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+test

再來檢視一下 master 分支的 commit 紀錄來和 FETCH_HEAD 比對:

5ba01be (HEAD -> master) 初始版本

可以發現 FETCH_HEAD 比本地端的 master 分支多一個 bf020f5 紀錄,那我們該怎麼把本地端的 master 分支進度追上 FETCH_HEAD 呢?其實跟之前合併分支時一樣只要使用 git merge,而我們要合併的分支名稱為 origin/master:

$ git merge origin/master
Updating 5ba01be..bf020f5
Fast-forward
 newREADME.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 newREADME.md

Pull 下載同步更新

而為什麼要先介紹 git fetch 呢?這是因為 git pull 其實就是:
git fetch + git merge = git pull

當我們執行 git pull 時,這個指令會幫我們從遠端取得遠端進度並且合併回分支裡面。
我們在 GitHub 在新增一個檔案來讓兩邊進度不一樣,然後我們這次使用 git pull 來將遠端進度同步到本地端上:

$ git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 654 bytes | 654.00 KiB/s, done.
來自 github.com:calon719/test
   bf020f5..0d8c254  master     -> origin/master
Updating bf020f5..0d8c254
Fast-forward
 test.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 test.md

可以發現上面的訊息就是 git fetchgit merge 兩個指令執行時的訊息。

將 Repository 從 Server 上下載回來

接下來我們要來介紹 git clone,今天當我們不小心把整個專案目錄弄丟或是想要將別人的專案下載回來,這時我們可以使用 git clone
首先我們到想要下載回來的專案頁面上,接下來點擊下圖中的 Code 按鈕:

我們可以選擇要使用 HTTPS 或是 SSH 下載,我們只要將這串放到 git clone 的指令的後面:

$ git clone https://github.com/calon719/test.git
Cloning into 'test'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 8 (delta 1), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (8/8), done.
Resolving deltas: 100% (1/1), done.

參考資料
  • 高見龍,《為你自己學 Git》

#Git







Related Posts

[Canvas 筆記] 甚麼是 canvas ? (未整理筆記)

[Canvas 筆記] 甚麼是 canvas ? (未整理筆記)

Codewars Kyu 4 Python 3

Codewars Kyu 4 Python 3

Debounce & Throttle in React - 1

Debounce & Throttle in React - 1


Comments