2016-06-08 80 views
9

場景:我分叉了一個github項目並開始對它進行處理(在將原始項目添加爲遠程時稱爲「上游」)。在使用我的fork時,上游項目發佈了許多版本:v1.3-stable,v1.4-stable,v1.5-experimental等。現在我需要將上游提交合併到我的主分支,但僅限於特定發行版,例如發行版v1.4-stable。這種情況下最好的工作流程是什麼?Git合併提交來自特定的上游版本

+0

你能提供一個鏈接到GitHub的回購? –

回答

3

假設V1.4穩定的遙控器上的一個標籤,你可以通過包含您的工作的分支調用此將這些更改應用到本地回購:

git fetch 
git rebase --onto $(git rev-list -n1 v1.4-stable) 

版本列表找到ID從v1.4-stable開始的最新提交,之後這些提交被重播,你自己的工作放在最上面。如果遙控器在分叉後發生了顯着變化,將會發生衝突。

如果V1.4穩定是遙控器上的一個分支,你反而會想要做

git pull --rebase origin v1.4-stable 
+0

爲什麼不合並分支或標籤?爲什麼這個rebase?這只是合併跟蹤。 – jszakmeister

+0

我可能會在這裏回答我自己的問題,但我認爲這是因爲您認爲OP正在尋求將他們的工作整合到上游......在這種情況下,rebase是有道理的。 – jszakmeister

1

首先確保您在v1.5-experimental的專用分支中工作。

其次,reset你的主分支上行/ V1.4(確保你沒有任何正在進行的工作:一個硬復位將消滅他們)

git fetch upstream 
git checkout master 
git reset --hard upstream/v1.4 
git push -f 

最後,衍合V1。在主控制器上的5分支分支(即在v1.4之上)

第一個,activate rerere(如果您之後必須做多個rebase:這會記錄您在過去如何解決類似衝突)

git config --global rerere.enabled true 

然後變基(重播你從你的分支上提交V1.4的頂部):

git checkout v1.5-experimental 
git rebase master 
git push -f 

的衝突,你將不得不解決,應該只有兩個感興趣的上游和完成併發修改衝突(你的實驗分支)。

+0

你正在告訴某人在其repo上運行'git reset --hard'。至少警告可能造成的後果...... –

+0

@HaraldNordgren謝謝你。我相應地編輯了我的答案。 – VonC

+1

是什麼讓你覺得他們沒有工作進展?這個問題的重點似乎是重新將個人工作與偏遠地區的變化結合起來。 git重置似乎是徹頭徹尾的破壞性。 –

2

這假定v1.4-stable是一個提交指示釋放,在主分支中的標籤。 結帳主拉的最新變化:

git checkout master 
git pull --rebase 

其次,重訂對這次提交頂端的開發分支。確保你的工作樹是乾淨的,你的頭指向您的開發分支:

git rebase v.14-stable 

這個命令將改變你的分支的基地,包括標籤的v.1.4-stable提交,並在它之前所有其他版本。

底墊之前:

o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp master 
    \ 
     o---o---o dev 

後:

o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp master 
          \ 
          o---o---o dev 
-1
git pull --rebase origin v1.4-stable