2014-10-01 114 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