[英]Git add a branch of a fork to the original project
我不知道是否有可能做這樣的事情。
我會用一個例子來解釋我的意思。
例如,我在 github 上有一個存儲庫。
一個用戶進來並 fork 我的存儲庫,創建一個新分支,然后進行更改。
我想在本地執行此操作,因此在我的電腦上,在與帶有我的分支的原始存儲庫相同的存儲庫中,添加用戶的分支,而無需克隆存儲庫。
有沒有辦法添加/下載該分支並將其添加到我的存儲庫中,以便我可以嘗試一下?
有沒有辦法添加/下載該分支並將其添加到我的存儲庫中,以便我可以嘗試一下?
當然,首先,將 遠程添加到指向 fork 的本地存儲庫。 例如,如果您的存儲庫被命名為example
並且我已經分叉了它,您將運行:
git remote add larsks https://github.com/larsks/example
該命令創建了一個名為larsks
的遠程,指向我的 fork(您可以為遠程命名任何您想要的名稱,但我通常使用 github 用戶名)。 現在,更新該遠程的本地緩存:
git remote update
現在您可以看到該分支中的分支並在本地檢查它們。 要訪問我的main
分支,您將運行:
git checkout larsks/main
或者訪問我的feature1
分支:
git checkout larsks/feature1
等等注意,上面的命令會讓你進入一個“分離的頭”state; 要查看基於其中一個分支的本地分支,您可能會運行以下命令:
git checkout -b feature1 larsks/feature1
git remote add
git fetch
底線是您需要復制他們的提交。 您不需要復制他們的“分支”,除非“分支”一詞的意思是“有問題的提交集”。
...無需克隆存儲庫
復制提交的行為是“克隆”。 或者是嗎? 這個詞的定義並不那么明確:當我們克隆一個存儲庫時,我們復制了它的所有提交——或者至少,我們想要復制的所有提交:那些我們關心並且對我們來說是新的提交。
另一方面, git clone
命令意味着:
(Git 實際上根本不需要任何分支名稱,但請參閱“不好玩”。)因此您不想運行git clone
,因為您不希望此處的第 1 步:您想使用現有的存儲庫。 但是您確實需要第 2 步和第 3 步,然后您可能需要也可能不需要最后一步的變化。
幸運的是,我們有:
git remote add
: this is how we add a remote to a repository, and in fact, git clone
essentially uses git remote add
to set up origin
so that you can run git fetch origin
; 和git fetch remote
:這是我們復制一些其他存儲庫的提交的方式,或者至少是那些我們覺得有趣並且對我們來說是新的提交。 git pull
命令,如果你使用它——我建議避免使用它,特別是如果你是 Git 新手——包括運行git fetch
,然后運行第二個 Z0BCC70105AD279503E31FE7B3F47-B665 提交命令。 將其拆分為兩個單獨的命令,以便您學習和理解這兩個步驟中的每一個,從而獲利(參見 TL;DR 部分)。
git fetch
命令調用一個特定的遠程,使用在git remote add
期間保存的 URL 。 你的 Git 軟件和他們的 Git 軟件——“他們”是在那個 URL 上回答的人——相反,以確定你有哪些提交以及他們有哪些提交。 然后您的 Git 軟件下載新提交。 當我們運行git clone
時,所有的提交對我們來說都是新的,所以我們得到了它們,但是當我們運行git fetch
時,我們得到一個更有限的集合,它運行得更快。
一旦您擁有多個遙控器,事情就會變得比只有一個時要復雜一些。 git fetch
命令需要知道使用哪個遙控器。 如果你在沒有任何 arguments 的情況下運行它,它會猜測。 如果一切都失敗了,它只是猜測origin
,這是遠程的標准名字。
運行git remote update
告訴您的 Git 軟件運行git fetch
到所有遠程。 更准確地說,它從一組定義的遙控器或一組中獲取,但這里的默認值是“全部”。 您可以對git fetch --all
:這里的--all
表示所有遙控器。
至於分支名稱:Git 使用這些來幫助您(和 Git)找到自己的提交。 當您從其他存儲庫獲取時,Git 在您自己的存儲庫中創建或更新名稱,我稱之為遠程跟蹤名稱。 這些不是分支名稱——盡管 Git 稱它們為遠程跟蹤分支名稱,但它們的工作方式與分支名稱的工作方式不同。 但是,如果您要進行自己的任何新提交,您將需要一個。
當你運行時,例如:
git checkout foobranch # or git switch foobranch
並且在您的分支集中沒有名為foobranch
的分支,您自己的 Git 軟件會——如果你在此處添加--no-guess
會抱怨沒有foobranch
,然后失敗。 但是,如果您讓 Git 使用--guess
(這是默認設置),您的 Git 將掃描您的遠程跟蹤名稱,以查找origin/foobranch
以及 - 如果有remote2
- remote2/foobranch
等等。 如果它恰好找到一個匹配項,它將“猜測”您的意思是使用遠程跟蹤名稱找到的提交創建一個名稱為foobranch
的新分支。
一旦你有兩個遙控器,這種猜測模式就會停止工作。 請注意這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.