2

我有一个带有“基本站点”的基本存储库,我克隆它以创建我的客户站点,所以我工作、提交、推送到客户端分支,然后我意识到在我的提交中间有一个或多个必须合并到基础存储库。这就是我所做的:

git 格式补丁 -1 SHA

然后我转到“基础站点”存储库并执行以下操作:

git am -3 补丁文件

没关系。问题是当我想将更改从“基础站点”拉到客户端存储库时,提交被重复。

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

编辑:

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

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

当我有一个新客户时,我创建他的目录并初始化一个存储库,然后我添加一个指向基本裸存储库的远程“base”,获取它,checkout base/master,然后执行“checkout -b master”来创建master从基地的主分支分支。然后我在我的本地服务器中创建一个“克隆--bare”并在本地工作站中克隆它。我们在需要时保存文档,设计师制作布局,然后将所有内容提交并推送到客户的裸仓库。我们总是在推送之前做一个“rebase origin/master”,以确保本地 repo 是最新的。

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

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

有任何想法吗?

谢谢!

4

1 回答 1

3

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

如果您这样做git-pull --rebase,或者两步等效的git fetch; git rebase origin/master,那么它将您的本地更改重新定位到上游。

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

~/client-site$ git fetch origin master

GitX中看起来像这样:

获取后 http://grab.by/m1T

当您rebase时,它​​会将您所有client不在的提交base,将它们从提交转换为补丁,并将它们一一应用到上游头部。当它注意到两个提交表达了相同的补丁时,它们会被合并为一个(上游提交存在而本地提交死亡)。

~/client-site$ git rebase origin/master

变基后 http://grab.by/m1X

正如@roe 所提到的,可能有更好的方法可以让您的存储库保持同步,例如挑选您需要的提交然后推送它。变基时很可能会遇到问题,但是您描述使用 format-patch 和 am 导出补丁的工作流程的方式似乎很安全。

于 2009-11-08T21:51:10.817 回答