2009-11-08 53 views
2

我有一个“基本点”,我克隆,使我的客户的网站基础信息库,所以我的工作,使提交,推到客户端叉,然后我意识到,在我提交的中间有一个或一个以上必须合并到基础存储库。这就是我所做的:GIT:如何避免重复的提交,同时保持大量的叉子?

git的格式补丁-1 SHA

然后我去了 “基址” 库并做:

混帐上午-3 patch_file

这没关系。问题是,当我想将更改从“基本站点”提交到客户端repo时,提交被重复。

有没有办法避免?也许有不同的工作流程

编辑:

事实上我仍然有问题,我的解释是说不清楚的。让我再试一次:

我有一个包含'docs','layout','pub'和'sql'文件夹的基础存储库,'docs'中只有一个空白'index.html', '布局'文件夹。在'pub'文件夹中,我安装了Joomla。

当我有一个新的客户端,我做他的目录并初始化一个存储库,然后我添加一个指向基本裸仓库的远程“基础”,获取它,结帐基本/主,然后做'签出-b主'从基地主分支创建主分支。然后,我在本地服务器上创建一个“clone --bare”,并在本地工作站中克隆它。我们在需要时保存文档,设计师进行布局,然后将所有内容都提交并推送到客户的裸回购。在推送之前,我们总是做一个'重新起源/主',以确保本地回购是最新的。

因此,当布局完成后,推,我拉它,并开始使Joomla模板。所以我做了很多提交,然后我意识到我必须对Joomla组件进行更改以使其能够正常工作。好吧,我更改组件,提交并继续制作模板,提交,...

现在我想将所有组件的提交提交到“基本回购”,因为我希望所有客户端都具有相同的更改。当我尝试@jleedev解决方案时,我所有的客户端提交到顶端,重写它已经在客户端裸回购的SHA。

任何想法?

谢谢!

+1

我没有完全明白你想要做什么,但是不应该使用合并,樱桃挑选或重新装饰而不是修补程序? – falstro 2009-11-08 21:40:35

+0

樱桃采摘仍然使用补丁 - 你最终得到两个具有相同差异的提交。 – 2009-11-08 21:58:34

+0

也许是子模块? – 2009-11-09 17:22:52

回答

3

是的! git-pull命令执行提取,然后进行合并。合并对你大叫,因为你有相同的补丁表达为两个不同名称的提交。

如果你这样做git-pull --rebase,或两步等效的git fetch; git rebase origin/master,那么它将rebase你的本地变化到上游。

比方说,你的回购看起来像这样; master包含您在客户端完成的工作,origin/master代表您已应用电子邮件补丁的上游基础。提取后,您会看到两个不同的分支,但您已导出的提交在两行中。

~/client-site$ git fetch origin master 

它看起来像这样在GitX

After the fetch http://grab.by/m1T

当你rebase,它需要你对client所有提交不在base,转换他们承诺的补丁,并应用他们一个接一个地落在上游头上。当它注意到两个提交表达相同的补丁时,它们会变成一个(上游提交生命和本地死亡)。

~/client-site$ git rebase origin/master 

After the rebase http://grab.by/m1X

由于@roe提到,有可能是更好的方法,让您的存储库同步,如樱桃采摘提交你需要,然后推动它。当您重新绑定时很有可能遇到问题,但您使用format-patch描述导出修补程序的工作流的方式似乎很安全。

+0

谢谢! 所以我需要这样做之前,我推动我的本地“客户”回购到它的在线回购,因为SHA将改变后的权利? 再次感谢! – Fredi 2009-11-08 22:36:20

+0

这个想法是重写客户端的提交以匹配在线的,所以是的。 – 2009-11-08 22:40:52

+0

另外,还有一个问题:你使用什么界面查看提交? (你截图的那个)谢谢! – Fredi 2009-11-08 22:40:57