我建议您创建暂存/支持存储库的本地克隆。然后,您将项目存储库添加为其他远程存储库,这使您可以在本地存储库中与它们进行交互。在本地进行合并,然后将结果推送到暂存库。
可以使用以下步骤来实现。
$ git clone -o staging http://staging
这将克隆您的登台存储库。您将需要使用“登台/支持”存储库的正确URL替换“ http:// staging ”。您可能还需要提供一个克隆存储库的路径作为另一个参数。参数-o确保将远程存储库称为“暂存”,这有助于稍后将其与项目存储库区分开。
下一步是添加要合并的远程存储库(在本例中为“ Sample Project 2”)
$ git remote add project2 http://sampleproject2
同样,用存储库“ Sample Project 2”的URL替换“ http:// sampleproject2 ”。您也可以更改“ project2”(这是远程存储库的名称),以更好地适合您的项目。
完成之后,git branch -r
将显示来自登台和project2的分支,如下所示:
$ git branch -r
staging/Production
staging/UAT
project2/Master
project2/QA
project2/DEV
下一步签出您要合并到的分支,如下所示:
$ git checkout -b staging_UAT --track staging/UAT
这将创建一个名为staging_UAT的新本地分支,该分支将跟踪登台存储库中的远程分支UAT。新分支将被立即检出。
现在,您已经从分期签出了UAT分支的副本。您可以合并来自project2的更改:
$ git merge project2/Master
现在,来自project2分支Master的所有更改都合并到当前分支(即staging_UAT)中。您可能想看看git log
结果。如果适合您的期望,则可以将其推送到暂存存储库:
$ git push staging staging_UAT:UAT
这样做会将本地分支staging_UAT的当前状态推送到名为staging的远程存储库中的分支UAT。
您可以同等地处理其他项目,还可以添加诸如staging_Production之类的分支以将您的更改合并到Staging的Production分支中。
您可以将同一克隆用于将来的合并,而无需一次又一次地进行所有克隆和分支创建。但是,在这种情况下,您需要更新有关远程分支机构的本地信息:
$ git checkout staging_UAT
$ git pull
首先,您需要更新staging_UAT以匹配Staging存储库中UAT的当前版本。这是通过“拉”更改来完成的。由于分支staging_UAT是使用“ --track staging / UAT”创建的,因此git知道从何处提取更改。如果暂存中的UAT从未以这种方式更改(意味着:正是使用此本地克隆从staging_UAT推送到暂存器),则不需要这样做。
如果在“登台”中更改了UAT并且您没有拉出,则在推入时会收到错误消息,说:
Updates were rejected because the tip of your current branch is behind its remote counterpart.
另一个更新会影响Project2存储库:
$ git fetch project2
此外,存储库project2的分支可能已更改。如您所见git fetch
,用于获取这些更改。提取和拉取之间的区别在于,拉取还将更新分支的本地副本。由于没有project2分支的本地副本,因此获取是可行的方法。(其实git pull
仅仅是一个快捷键git fetch
和git merge
)。
如果您已经具有包含代码的存储库的本地副本,则也可以将其用于合并过程。您只需要确保不混淆本地开发和合并,也许您需要处理更多的远程存储库,因为您有更多的开发库。
本地分支staging_UAT也可以仅称为UAT,从而使推送变得更加简单(git push
在这种情况下就足够了)。但是,这可能会造成混乱,因为在多个远程站点中都有使用该名称的分支。
或者,您可以更改设置“ push.default ”。请参阅文档,以了解这将如何影响您的推动。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句