好的,我有以下情况。我有一个名为 develop 的分支 从开发我创建了一个名为 AIOEC-393 的分支 它包含以下提交:
nicoladj77重新安装wordpress 938f469
nicoladj77 AIOEC-122:为ai1ec_events添加了供稿2254569
nicoladj77 AIOEC-122:删除已解析的css文件d10e29e
nicoladj77 AIOEC-122:对功能38054dd添加了评论
nicoladj77 AIOEC-393:开始移动文件6f92360
nicoladj77 AIOEC-393移动了类并取出了require_once调用 b7ab691
nicoladj77 AIOEC-393:开始移动基础容器87e8b91
nicoladj77 AIOEC-393:按建议移动课程并重构a 我一点儿...... 1093032
我需要创建另一个基于 develop 的分支,并且只包含 AIOEC-393 的最后四个提交(当然是以AIOEC-393开头的提交)。我怎么能这样做?
答案 0 :(得分:2)
git cherry-pick
可以做到这一点。只需将要合并的提交ID提供给当前分支作为命令的参数。这将“挑选”提交,即使提交属于不同的分支。
或者,也应该起作用的是:
这可以避免做一次变基。
答案 1 :(得分: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>
答案 2 :(得分:1)
我建议您使用rebase onto
的解决方案。假设我们有以下回购:
user@HOST 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)
除了 commit2 之外,您希望从AIOEC-393
分支进行所有提交。
让我们转到'temp'分支(以便AIOEC-393
不被修改):
$ git checkout -b develop-target
然后使用 commit2 作为支点使用rebase onto
命令:
$ git rebase --onto develop fb11e98 develop-target
让我们看一下日志:
user@HOST 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)
现在我们只需要从develop
快进到develop-target
(然后删除develop-target
):
$ git checkout develop
$ git rebase develop-target
$ git branch -d develop-target
日志:
user@HOST 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)