Home >> Blog >> 獲取

我們SEO搜尋引擎優化執行人員常常會使用git fetch指令於工作程序中,一起了解如何使用。

git fetch 指令的使用方式

git 遠端 git fetch git push git pull
該git fetch命令將提交、文件和引用從遠端資料庫下載到本地資料庫。當您想查看其他人一直在做什麼時,您會執行獲取操作。它的相似之處svn update在於它可以讓您查看中央歷史記錄的進展情況,但它不會強制您將更改實際合併到您的資料庫中。Git 將獲取的內容與現有的本地內容隔離開來;它對您的本地開發工作絕對沒有影響。git checkout 必須使用該命令明確簽出獲取的內容。這使得在將提交與本地資料庫集成之前,獲取一種安全的方式來審查提交。

從遠端資料庫下載內容時,git pull可以git fetch使用命令來完成任務。您可以考慮git fetch這兩個命令的“安全”版本。它將下載遠端內容,但不會更新您本地 repo 的工作狀態,從而使您當前的工作保持不變。git pull是更具侵略性的選擇;它將下載活動本地分支的遠端內容並立即執行git merge以為新的遠端內容創建合併提交。如果您有正在進行的未決更改,這將導致衝突並啟動合併衝突解決流程。

git fetch 如何與遠端分支一起工作

為了更好地理解git fetch工作原理,讓我們討論 Git 如何組織和存儲提交。在後台,在資料庫的./.git/objects目錄中,Git 存儲所有提交,本地和遠端。Git 通過使用分支引用將遠端和本地分支提交明顯分開。本地分支的 refs 存儲在./.git/refs/heads/. 執行該git branch 命令將輸出本地分支 refs 的列表。以下是git branch帶有一些展示分支名稱的輸出示例。

git branch
main
feature1
debug2

檢查/.git/refs/heads/目錄的內容會發現類似的輸出。

ls ./.git/refs/heads/
main
feature1
debug2

遠端分支就像本地分支一樣,除了它們映射到來自其他人的資料庫的提交。遠端分支以它們所屬的遠端為前綴,這樣您就不會將它們與本地分支混淆。與本地分支一樣,Git 也有遠端分支的 refs。遠端分支引用位於./.git/refs/remotes/目錄中。下一個示例代碼片段顯示了在獲取名為 remote-repo 的遠端 repo 後您可能會看到的分支:

git branch -r
# origin/main
# origin/feature1
# origin/debug2
# remote-repo/main
# remote-repo/other-feature

此輸出顯示我們之前檢查過的本地分支,但現在顯示它們以origin/. 此外,我們現在看到以 . 為前綴的遠端分支remote-repo。您可以像檢出本地分支一樣檢出遠端分支,但這會使您處於分離HEAD狀態(就像檢出舊提交一樣)。您可以將它們視為只讀分支。要查看您的遠端分支,只需將-r標誌傳遞給git branch命令。

您可以使用通常的git checkout和命令檢查遠端分支。如果您批准遠端分支包含的更改,則可以將其合併到具有正常. 因此,與 SVN 不同,將本地資料庫與遠端資料庫同步實際上是一個兩步過程:獲取,然後合併。該命令是此過程的便捷快捷方式。git loggit mergegit pull

Git 獲取命令和選項

git fetch

從資料庫中獲取所有分支。這還會從其他資料庫下載所有必需的提交和文件。

git fetch

與上面的命令相同,但只獲取指定的分支。

git fetch --all

獲取所有已註冊遙控器及其分支的強力移動:

git fetch --dry-run

該--dry-run選項將執行命令的展示運行。它將輸出在獲取期間將採取但不應用它們的操作示例。

Git 獲取示例

git 獲取遠端分支

以下示例將展示如何獲取遠端分支並將本地工作狀態更新為遠端內容。在此示例中,讓我們假設有一個中央資料庫來源,已使用該命令從中clone了本地資料庫。讓我們還假設一個名為 coworkers_repo 的附加遠端資料庫,其中包含我們將配置和獲取的 feature_branch。有了這些假設,讓我們繼續這個例子。git clone

首先,我們需要使用git remote 命令配置遠端倉庫。

git remote add coworkers_repo git@bitbucket.org:coworker/coworkers_repo.git

在這裡,我們使用 repo URL 創建了對同事 repo 的引用。我們現在將傳遞該遠端名稱git fetch以下載內容。

git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch

我們現在在本地擁有 coworkers/feature_branch 的內容,我們需要將其集成到我們的本地工作副本中。我們通過使用git checkout 命令簽出新下載的遠端分支來開始此過程。

git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b

此結帳操作的輸出表明我們處於分離HEAD狀態。這是意料之中的,這意味著我們的HEADref 指向的 ref 與我們的本地歷史不按順序排列。由於HEAD指向 coworkers/feature_branch ref,我們可以從該 ref 創建一個新的本地分支。“分離HEAD”輸出向我們展示瞭如何使用以下git checkout命令執行此操作:

git checkout -b local_feature_branch

在這裡,我們創建了一個名為 local_feature_branch 的新本地分支。這將更新HEAD指向最新的遠端內容,我們可以從這一點繼續開發。

與 git fetch 同步源

以下示例介紹了將本地資料庫與中央資料庫的主分支同步的典型工作流程。

git fetch origin

這將顯示已下載的分支:

a1e8fb5..45e66a4 main -> origin/main
a1e8fb5..9e8ab1c develop -> origin/develop
* [new branch] some-feature -> origin/some-feature

來自這些新遠端分支的提交在下圖中顯示為正方形而不是圓形。如您所見,git fetch使您可以訪問另一個資料庫的整個分支結構。

獲取

要查看哪些提交已添加到上游主目錄,您可以使用 origin/main 作為過濾器運行: git log

git log --oneline main..origin/main

要批准更改並將它們合併到本地主分支中,請使用以下命令:

git checkout main
git log origin/main

然後我們可以使用git merge origin/main:

git merge origin/main

origin/main 和 main 分支現在指向同一個提交,並且您與上游開發同步。

Git 抓取總結

回顧一下,git fetch是用於從遠端資料庫下載內容的主要命令。git fetch與git remote、git branch、git checkout和結合使用,git reset 將本地資料庫更新為遠端狀態。該git fetch命令是協作 git 工作流的關鍵部分。git fetch但是,具有與 類似的行為git pull, git fetch可以被認為是更安全、非破壞性的版本。