2012-09-05 79 views
0

好吧,我有以下情况。我有一个叫的分支开发
从开发我创建了一个叫做AIOEC-393的分支。
它包含如下的提交:如何从一个分支提交一些提交并将这些提交与git中的另一个分支合并

nicoladj77重新安装的WordPress 938f469

nicoladj77 AIOEC-122:删除解析css文件d10e29e

:增加了对ai1ec_events 2254569

nicoladj77 AIOEC-122供稿nicoladj77 AIOEC-122:对功能添加评论38054dd

nicoladj77 AIOEC-393:Sta rting移动文件6f92360

nicoladj77 AIOEC-393移动类和拿出require_once调用 b7ab691

nicoladj77 AIOEC-393:开始移动基础容器87e8b91

nicoladj77 AIOEC-393:感动类的建议和重构一个 一会儿我...... 1093032

我需要建立一个基于另一个分支开发和CONTA仅插入最后四次提交的AIOEC-393(当然是以AIOEC-393开头的提交)。我怎样才能做到这一点?

回答

2

git cherry-pick可以做到这一点。只需将要合并到当前分支中的提交ID作为该命令的参数。这将会“樱桃挑选”提交,即使提交属于不同的分支。

或者说,什么也应努力为:

  1. 克隆/签出分支
  2. 倒带一批提交的(复位 - 硬commit_ID)
  3. 摘樱桃的提交你想

这可以避免做一个rebase。

+0

不,我只想做一个新的分支,它是“发展” +最新的四次提交 –

+0

是的,看看更新后的答案。应该工作 – ritter

+1

'reset --hard'是危险的建议... – knittl

1

如果提交对你的分支的第一个提交,你可以简单地签出最后一次提交,并在其位置创建一个新的分支:

git checkout -b new_branch <id of "AIOEC-393: Starting to move files 6f92360"> 

如果有其他的提交(不希望)您在新的分支想要提交之前,创建一个新的分支,它变基:

git checkout -b new_branch <last commit you want> 
git rebase --onto develop <commit before your commits> new_branch 

或者,创建一个分支关闭develop和樱桃挑选你想要的提交:

git checkout -b new_branch develop 
git cherry-pick <commit before your commits>..<last commit you want> 
1

我建议你与rebase onto解决方案。假设我们有以下回购:

[email protected] c:/_TEMP/FOO (AIOEC-393) $ git lga 
* 8c2d5c5 - (HEAD, AIOEC-393) commit5 (Yanflea 2 minutes ago) 
* 3c20e52 - commit4 (Yanflea 2 minutes ago) 
* c5383af - commit3 (Yanflea 2 minutes ago) 
* fb11e98 - commit2 (Yanflea 2 minutes ago) 
* e019261 - (develop) commit1 (Yanflea 2 minutes ago) 
* 0cfe064 - (master) Initial commit (Yanflea 2 minutes ago) 

而且你想拥有从AIOEC-393分公司所有提交除commit2

让我们进入到一个 '临时' 分支(因此AIOEC-393没有被修改):

$ git checkout -b develop-target 

,然后使用commit2为支点使用rebase onto命令:

$ git rebase --onto develop fb11e98 develop-target 

让我们来看看日志:

[email protected] c:/_TEMP/FOO (develop-target) $ git lga 
* 7bcb162 - (HEAD, develop-target) commit5 (Yanflea 2 minutes ago) 
* 3c89459 - commit4 (Yanflea 2 minutes ago) 
* e6ed5f7 - commit3 (Yanflea 2 minutes ago) 
* e019261 - (develop) commit1 (Yanflea 2 minutes ago) 
* 0cfe064 - (master) Initial commit (Yanflea 2 minutes ago) 

现在我们只需要快进从developdevelop-target(然后删除develop-target):

$ git checkout develop 
$ git rebase develop-target 
$ git branch -d develop-target 

日志:

[email protected] c:/_TEMP/FOO (develop) $ git lga 
* 7bcb162 - (HEAD, develop) commit5 (Yanflea 2 minutes ago) 
* 3c89459 - commit4 (Yanflea 2 minutes ago) 
* e6ed5f7 - commit3 (Yanflea 2 minutes ago) 
* e019261 - commit1 (Yanflea 2 minutes ago) 
* 0cfe064 - (master) Initial commit (Yanflea 2 minutes ago) 
相关问题