gpt4 book ai didi

GIT:如何在维护大量 fork 的同时避免重复提交?

转载 作者:行者123 更新时间:2023-12-04 07:02:03 24 4
gpt4 key购买 nike

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

git 格式补丁 -1 SHA

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

git am -3 补丁文件

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

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

编辑:

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

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

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

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

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

有任何想法吗?

谢谢!

最佳答案

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

如果你这样做 git-pull --rebase ,或等效于 git fetch; git rebase origin/master 的两步,然后它会将您的本地更改重新设置到上游。

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

~/client-site$ git fetch origin master

GitX中看起来是这样的:

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

当您 rebase ,它需要您在 client 上的所有提交不在 base ,将它们从提交转换为补丁,并将它们一一应用到上游头部。当它注意到两个提交表达相同的补丁时,它们会被 merge 为一个(上游提交存活而本地提交死亡)。
~/client-site$ git rebase origin/master

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

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

关于GIT:如何在维护大量 fork 的同时避免重复提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com