2015-08-21 24 views
0

不知道究竟我做錯了,但我在我的git回購搞砸了的東西,現在看起來是這樣的:GIT固定重複的提交推到遠程

master, origin/master : C1 
develop, origin/develop : C1 -> C2 -> C3 -> C4 -> C5 -> C6  -> C7 
feature, origin/feature : C1 -> C2 -> C3 -> C4 -------> C6copy -> C7copy -> C8 ->...-> C50 

,我應該跑什麼混帳命令來獲得以下我的開發和主分支的狀態:

master, origin/master : C1 -> C2 -> C3 -> C4 -> C5 -> C6 -----> C7 -> C8 ->...-> C50 
develop, origin/develop : C1 -> C2 -> C3 -> C4 -> C5 -> C6 -----> C7 -> C8 ->...-> C50 

我不再打算保留功能分支,我可以刪除它。但是我想在開始分支之前合併所有的變化。好東西是我是唯一一個向/從這個存儲庫推/拉的人!

+0

你能澄清一下你是指''C6copy''和''C7copy''? 「C4」和「C4」頂部是否完成了「C6」和「C7」的櫻桃選擇? –

+0

它們是C6和C7的副本 – nurabha

+0

您是否可以不將快速合併功能發展爲開發? –

回答

1

如果C6copy和C7copy是C6和C7的實際拷貝,你可以做到以下幾點:

git checkout feature 
git rebase develop 

這些命令的功能應該是這樣的,如果C6和C7是副本後:

特點:C1 - > C2 - > C3 - > C4 - > C5 - > 6 - > 7 - > 8 - > ...-> C50

或者這樣,如果他們不是:

特徵:C1 - > C2 - > C3 - > C4 - > C5 - > C6 - > C7 - > C6copy - > C7copy - > C8 - > ...-> C50

如果他們不是,並且你想擺脫副本,你可以交互rebase而不是擺脫這兩個複製的提交。
一旦達到在功能分支不同的場景,你可以這樣做:

git branch -f develop 
git branch -f master 

這將迫使分公司開發和掌握你的當前位置,這是C50,最後提交的功能。然後你的倉庫應該是這樣的:

產地/主:C1
主:C1 - > C2 - > C3 - > C4 - > C5 - > 6 - > 7 - > 8 - > ... - > C50
產地/發展:C1-> C2-> C3-> C4-> C5-> C6-> C7
顯現:C1-> C2-> C3-> C4-> C5-> C6-> C7 - > C8 - > ...-> C50
產地/特性:C1 - > C2 - > C3 - > C4 -------> C6copy - > C7copy - > C8 - > ...-> C50
特徵:C1→C2→C3→C4→C5→C6→C7→C8→...→C50

在這種情況下,主是49款提前起源/主,發展將是43款的起源提前/開發,所以你可以只把他們正常:

git checkout develop 
git push origin develop 
git checkout master 
git push origin master 

最後,所有你需要如果你願意,做的是刪除功能。特點將是45款領先和落後46原產地/功能(因產地/功能缺失C5),則需要進行強制刪除,爲您的分支沒有完全合併尚未:

git branch -D feature 
+0

感謝您的回覆。我會試試這個,讓你知道。另外,我忘了在我的帖子中提到。請注意,提交C5不是來自開發,起源/開發分支的一部分。它不影響你建議的方法嗎? – nurabha

+0

不,不管C5是否部分,它都不應該有影響。如上所述,唯一可能的區別是,如果C6和C7不是副本,那麼他們(只購買他們)將被複制 – Juan

+0

我收到很多提交合並衝突。太多。怎麼樣rebind發展到功能。它會導致類似的合併提交。它是否也會重寫開發分支中的提交歷史記錄? – nurabha