2011-08-31 108 views
0

我在我的git repo中有3個分支:主人,展臺發展。對於每個功能,我創建了新的brach,從開發。 功能完成後,我會合並它分支到開發(與- 無-ff選項)。(git)如何將所有修訂版本從不存在的分支合併到其他分支中?

例如,我有3個特徵(F1F2F3)合併分支開發,以及i除去F1F2F3(或它被創建在另一臺機器上,並且開發人員不會將其推入原始回購),合併到開發。 現在我要「放」 F1F3站在分支(它有一個以上的在其承諾,我不能使用櫻桃採摘)我應該怎麼辦?

當然,我可以創建cherry-pick腳本進行修訂範圍合併,但也許,我有一個更好的方法來合併它(通過舊的分支名稱,或其他)。

my repo: 
develop   --- 
      /
stand  --- 
     /
master --- 

feature branches: 
      f1 f2 f3 
     /\/\/\ 
develop ---------------- 

i want: f1 f2 f3 
develop ----------------  
stand ----- ------- 

謝謝。

回答

1

如果你沒有分支了,幸運的是你使用--no-ff以便它們可以被恢復。看在gitk,找到最後的SHA1提交合並上develop提交之前功能1.然後把它找回來只是做:

git branch f1 SHA1 

然後把它們放在stand,做到:

git rebase --onto stand develop f1 
git checkout stand 
git merge f1 

git rebase --onto stand develop f3 
git checkout stand 
git merge f3 
+0

美麗,謝謝。還有一個問題:如果我在某人提交任何內容後創建了分支f3,它會合並嗎? –

+0

這個特殊的方法只會合併在'f3'分支後實際做出的改變。例如,它不會拉入'f2'。如果這是你想要的,還有其他方法可以吸引它。 –

1

你應該能夠選擇合併提交(合併兩個分支後創建),理論上應該按照你的要求做。

+0

是的,我讀過[this](http://stackoverflow.com/questions/1994463/how-to-cherry-pick-a-range-of-commits-and-merge-into-another-branch)的話題,但我想要一些東西:只要告訴git「嘿,前些時候我有名稱爲f1的分支,但現在我將它合併到開發中並將其移除,現在,請將所有受f1變化影響的開發人員轉移到stand。」 –

+0

@Alexey Kutuzov等待,「刪除它」?然後,你堅持採摘櫻桃,不是嗎?您是否在尋找某種方式從已刪除的歷史記錄中恢復分支機構? – ANeves

+0

@rubenvb,我真的很抱歉 - 問題不正確(現在修復)。當然,我還沒有分支。 –

1

,你可以:

  1. 創建分支f1_cpy(上f1)和分支f3_cpy(上f3),這是兩個副本,你將移動/應用;
  2. 結賬至f1_cpy,將其重新分配至stand,然後將其合併至stand;
  3. 結帳到f3_cpy,重新分配到stand(現在包括f1_cpy),然後合併f3_cpystand

這是在像挑肥揀瘦的做法,但也許更容易理解和管理/使用。

複製分支的使用是這樣,你不會破壞你的真實歷史出現問題。
如果你不使用複製分支,並最終失去寶貴的歷史...深吸一口氣,並潛入git reflog
使用副本,所以你可以隨意玩。

雜耍刀只有在受到傷害時纔會出色。:|
(我學習了關於git-rebase的課程。)

+0

對不起@ANeves。我沒有正確的問題(現在修正):我沒有f1和f3分支了。 –

相關問題