2011-04-21 25 views
66

我分出了一個項目,做了一些修改,並且接受了一個拉取請求。但是現在,我分叉的項目移動到另一個存儲庫,並且是該存儲庫的一個分支。如何更改我從哪個GitHub項目中分出?

即:

Original -> MyFork 

現在:

NewOriginal -> Original -> MyFork 

我將如何得到它的下面?

NewOriginal -> MyFork 
+29

接受的答案提供了一個解決辦法,但並沒有真正回答的主要問題,如何更改元數據在GitHub上本身「從分叉」。我對同樣的事情感興趣。 – 2012-12-25 22:57:09

回答

49

本地你可以改變原來的存儲庫的目標是位於。通常認爲庫稱爲上游,所以你可以這樣做:

git remote set-url upstream git://example.com/NewOriginal.git 

根據您所使用的主機(即,你的叉子所在地),可能有一些額外的內部鏈接,你可以不容易改變。例如,在Github上,分支直接與您從中分出的原始鏈接相關聯。在這種情況下,您需要再次分叉新項目,並使用新分叉。

在這種情況下,但是你可以很容易地改變起源庫的URL,以及,只是把你在你的舊叉之前改變了一切到您的新的分支。

+10

通常上游存儲庫的遠程被稱爲'origin' – knittl 2011-04-21 20:16:09

+3

@knittl:不是真的,上游存儲庫是fork基於的原始存儲庫。 Origin是您從公共存儲庫克隆而來的,即叉子。 – poke 2011-04-21 20:17:57

+2

如果你克隆了一個版本庫,那麼這個版本庫的分支將通過'origin'遠程獲得。 「origin」遙控器的網址是從中克隆的網址。 git – knittl 2011-04-21 20:20:56

9

更新在你的倉庫遠程URL

git remote set-url origin <url to NewOriginal, e.g. git://…/bla.git> 
+2

這是行不通的。 OP仍然需要將來源設置爲MyFork,以便在他將更改推送到GitHub上的MyFork後,他可以對NewOriginal執行拉取請求。他沒有對NewOriginal的寫入權限,因此將起源設置爲會導致推送失敗。 – Guy 2014-09-24 17:50:17

56

注意:以下解決方案不完整,因爲您將失去所有維基內容和問題特定於您的分叉。

您可以通過以下步驟實現:

  1. 從現有的叉子拉下所有分支和標籤。
  2. 在GitHub上刪除您的存儲庫。
  3. 從新存儲庫分叉。
  4. 如有必要,更新遠程URL
  5. 將所有本地分支和標籤推送到新的存儲庫。
+6

這是問題的正確答案 - OP需要更改github對「父」的視圖,因此當他發出pull請求時,他們會轉到新父項,而不是舊項。看起來似乎唯一的答案是刪除存儲庫並再次分叉。 – Ether 2013-08-25 17:38:13

+21

這是在github中缺少的功能的解決方法。 – abergmeier 2014-01-15 10:25:02

+1

這樣的羞恥github仍然沒有一個更好的工作流程。 – Ashimema 2015-09-08 21:26:58

2

假設您執行了正確的分叉並添加上游參見githubHelpOnFork;只需更改上游URL,這樣做:

  1. 驗證當前的上游和原始的樣子:

    git remote -v 
    
  2. 如果你看到上游列出你只想改變它的URL,做什麼@戳建議(如果不遵循helpGithub以上鍊接添加新的上游):

    git remote set-url upstream git://example.com/NewOriginal.git 
    
  3. 然後驗證上游指向新的URL

    遠程Git -v

相關問題