我是git的新手,我想知道如何从示例项目2 的主分支合并到过渡/支持中的UAT 分支。我知道有可能在特定存储库下合并不同的分支,但是不确定如何合并整个存储库。
我真正想做的是,在完成 Sample Project 2 的工作之后,我想将其移至 UAT 分支进行测试等,最后移至 Production 分支进行发布。
先谢谢您的帮助
最佳答案
我建议您创建暂存/支持存储库的本地克隆。然后,将项目存储库添加为其他远程存储库,这使您可以在本地存储库中与它们进行交互。在本地进行合并,然后将结果推送到暂存库。
可以使用以下步骤来实现。
初始化和第一次合并
$ git clone -o staging http://staging
这将克隆您的登台存储库。您将需要使用登台/支持存储库的正确URL替换“http://staging”。您可能还想提供一个克隆存储库的路径作为另一个参数。参数-o确保将远程存储库称为“登台”,这有助于稍后将其与项目存储库区分开。
下一步是添加要合并的远程存储库(在本例中为“Sample Project 2”)
$ git remote add project2 http://sampleproject2
同样,将“http://sampleproject2”替换为存储库“Sample Project 2”的URL。您也可以更改“project2”(远程存储库的名称),以更好地适合您的项目。
完成之后,
git branch -r
将显示staging和project2的分支,如下所示:$ git branch -r
staging/Production
staging/UAT
project2/Master
project2/QA
project2/DEV
下一步 checkout 要合并到的分支,如下所示:
$ git checkout -b staging_UAT --track staging/UAT
这将创建一个名为staging_UAT的新本地分支,该分支将跟踪登台存储库中的远程分支UAT。新分支将立即 check out 。
现在,您已经从分期 checkout 了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分支中。
future 合并
您可以将同一克隆用于将来的合并,而无需一次又一次地进行所有克隆和分支创建。但是,在这种情况下,您需要更新有关远程分支机构的本地信息:
$ git checkout staging_UAT
$ git pull
首先,您需要更新staging_UAT以匹配Staging存储库中UAT的当前版本。这是通过“拉”更改来完成的。由于分支staging_UAT是使用“--track staging / UAT”创建的,因此git知道从何处提取更改。如果暂存中的UAT从未以这种方式更改(意味着:正是使用此本地克隆从staging_UAT推送到暂存器),则不需要这样做。
如果在“登台”中更改了UAT并且您没有拉出,则在 push 时会收到错误消息,说:
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”。请参阅文档,以了解这将如何影响您的 push 。
关于git - 如何 merge 两个不同存储库中的分支?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38468700/