我有兩個回購。起源是上游的一個分支。我試圖做的是從上游分支重新提交一個特定的提交序列回到我的origin/master
。從我一直在閱讀的內容來看,雖然櫻桃選擇允許範圍 - 它沒有辦法控制你從哪個分支拉動範圍。所以,我試圖用rebase - 去做這件事。這是我如何去做的。Git:使用rebase --onto/cherry-pick重播一系列提交
我檢出上游分支(
git checkout upstream/feature
)。這使我陷入無頭的狀態。然後,我從這個無頭狀態(
git checkout -b temp
)創建一個臨時分支。現在我想要將
upstream/feature
分支上的所有提交從HEAD
重新回放到標記。我正在執行命令:git rebase --onto master start_tag^
。
看起來這應該開始重播從START_TAG高達upstream/feature
(現爲分支TEMP)的頭所有的提交。 rebase運行,甚至表示它在輸出中重放正確的提交併且完成並沒有錯誤。但是,當我重新檢查主人時,新的提交不在那裏。看着我的臨時分支,看起來它只是重新提交自己的提交。他們仍然在那裏,但他們現在有新的提交ID。
任何想法如何獲得從上游分支到本地分支的一系列提交?我不知道爲什麼rebase --onto
沒有在主人之上玩。
編輯:那我爲什麼要這樣做呢?
這個問題出現了,我試圖這樣做。基本上,我已經跌倒了兔子洞,正在盡我所能來管理我所做的一切。這是故事。
我們從原來的Joomla網站開始(稱爲repo A
)。所有的事情都進行得很順利,客戶決定他們想要3個更多的網站,據說這些網站只是一些小的樣式變化。所以,我分出了我原來的repo A
三個回購券(repo B
,repo C
,repo D
)。
隨着時間的推移,Repo A
有一些變化,它是獨特的,我想發送給叉子。要在所有回購中共享更改,我創建了shared
分支。然後,在我的下游回購協議中,我可以從上游repo A
中抽取shared
分支。
更多的時間過去了,這些網站越來越遠。我遇到的情況是repo B
中使用的組件在repo C
中不需要。同樣,在repo B
AND repo C
等需要一些組件。在我的天真中,我決定如果我能夠將各個組件拖入分支,管理起來會更容易。在夢幻世界中,git子模塊應該是我去過的方式,但是我不能在Joomla中使用這些模塊,因爲它們的目錄是結構化的(不僅有一個文件夾可以跳轉到所有組件文件中) 。我最終決定將我的個人組件分拆到他們自己的分支機構(branch componentY
,branch componentZ
)。我不得不分支repoA master
,因爲組件分支中有需要的祖先提交,這些分支在repoA shared
分支中尚未結束。
在我的下游分支repo B
我現在從repoA shared
分支中抽取一般變化。我還需要從repoA
組件分支中獲取新更改。我遇到的問題是,我不能簡單地在repoA componentZ
中合併,因爲在我創建repoA componentZ
分支之前,它會引起master
上的所有提交。我標記了第一個componentZ
提交,這是從我分支爲start_tag
時開始的。
回到我原來的問題,所以我現在倒在repo B
。我已成功拉入repoA shared
分支併合並。現在我正在尋找合併(合併將是理想的,但我不認爲它適用於這種情況)提交repoA componentZ
從該分支的HEAD分支到我已標記爲start_tag
的提交。
所以,是的,相當混亂;但這正是我現在正在處理的事情。
你爲什麼重新綁定***上游***回購的提交在你的本地提交之上?這聽起來像你在倒退。人們通常希望通過在上游工作之上重新設置他們的本地提交***來將他們的本地工作與上游代碼同步。如果你重新調整上游工作,上游回購可以更長時間接受來自你的請求,因爲你已經基本重寫了他們的工作。另外,什麼是'start_tag'?這是來自上游回購的標籤,還是您自己製作的標籤? –