2015-10-04 71 views
0

我的一个类的导师选择为我现在正在使用的类的每个任务创建一个包含文件夹的单个存储库。这不是我第一次使用git或github进行刷理,但这种设置很容易产生混淆。Git:将基于另一个的分支移动到基于主的位置

每个作业都作为分支进行工作,并将其“提交”为最终版本,我们将创建拉回请求发送给主人。这很简单。但我刚开始一个新的项目工作,在创造它的分支,我貌似包括了现有项目的所有提交,这样我的回购协议是这样的:

{ Project A Commits } { Pr. B Commits } 
    --o--o--o--o---o----o------------o----o ProjectB 
/
o---------------------------------------- master 
\ 
    --o--o--o--o---o----o ProjectA 

当它真的应该是这样的:

----o----o ProjectB 
/
o---------------------------------------- master 
\ 
    --o--o--o--o---o----o ProjectA 

我知道有这样的事情为rebase,但似乎适用于稍有不同的情况比我已经得到了我自己入咸菜。我真的不希望ProjectA中的所有更改都在ProjectB中堆积,而我等待ProjectA的pull请求获得教师批准。

+0

您可以使用源代码树,交互式地[rebase] [root提交]的孩子来做到这一点...这将给你一个你的ProjectB分支的提交列表,你可以删除分支上的任何提交 – EdmundYeung99

回答

0

您想重写历史记录,以便第一个B提交的父级是根。

这就是git rebase,特别是git rebase -i

检出分支B,运行git rebase -i <ID of root commit>,然后删除所有您想要删除的提交。

+0

我刚才试过,并且删除了不属于我在B项目上所做的工作的其他提交,但在重新绑定之后,ProjectB的分支仍然充满了项目A提交。 – phrz

+0

这不应该发生。 rebase的输出是什么?什么是前后的'git log'? – SLaks

+0

所以发生了什么是在交互式转化模式中出现的多余提交都来自A之前的项目,当我将它们全部删除时项目仍在ProjectB分支中。 rebase成功运行,没有错误,并且logs/rebase文件如下所示:http://phrz.io/dR9N(Log:Before),http://phrz.io/dQh7(Log:After),http: //phrz.io/dQs3(Rebase list:Before),http://phrz.io/dQbA(Rebase list:After) – phrz