2014-10-01 81 views
0

在主分支我有如下承諾:如何在櫻桃採摘後刪除無主分支中的舊提交?

A-B-C-D-HEAD 

在分支 「測試」 我有:

A 

我:

git cherry-pick <SHA FOR COMMIT C> 

不過,我不想犯B在「測試」分支上。我怎麼能忽略它?使測試分支落得像: AC

+1

您是否只希望在測試分支上提交C?或測試分支上的A和C? – 2014-10-01 05:36:31

+2

您需要編輯您的問題以顯示您的測試分支相對於其他提交的位置。 – 2014-10-01 05:37:20

+0

更新了問題。謝謝:) – Sara 2014-10-01 05:38:39

回答

4

你可以這樣做:(假設碩士點到d)
1(主)git-checkout -b test
2.(測試)git rebase -i
你將有一個列表提交如下:

pick b6e7d38 A 
pick 263b0cc B 
pick 6bcea1d C 
pick 6kdf8gd D 

只需刪除您不需要的提交(此處爲B和D)。保存並繼續,重新綁定時將被忽略。

+0

如果她重新啓動並刪除提交,它們將會從主服務器中刪除。她希望他們在主人面前,但不是在測試。 – 2014-10-01 07:10:04

+0

對不起,但我不同意你的觀點。請參考下面的文檔 你可以通過重新組合你的提交和擠壓你不需要的提交。 參考這裏:http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html – Garima 2014-10-01 07:50:35

+0

我同意,你的方法是完全正確的,但在一個錯誤的分支。如果您重新設置master分支並刪除D和B,那麼它們將會消失。你的方法是正確的,如果她這樣做,而在測試分支,其中測試已發源於主高手指向D. 我編輯答案爲rebase -i主人本來是她的混亂 – 2014-10-01 09:30:04

0

根據我的最佳選擇將是git format-path

第一步:(主)git format-patch -2
步驟2:(主)git checkout -b test <SHA of Commit-A>
步驟3:(測試)git am 0002-Commit-Msg-of-C

你是好去!

說明:步驟1將創建2補丁文件,一個用於提交d,一個用於C.在第三步要應用的補丁過一陣提交-C製成(改變)(測試點A,步驟2)

希望這會有所幫助!

PS:如果您在B中的更改與C中的更改無關,則這將起作用。

+0

全部那需要的是'git cherry-pick'。 – Jubobs 2014-10-01 08:59:54