我是git的新手,我想知道如何在示例项目2 到 UAT 分支的 Master 分支>分段/支持即可。我知道可以在特定存储库下合并不同的分支,但不确定合并是如何跨存储库工作的。
我真正想要做的是,在完成示例项目2 之后,我想将其移至 UAT 分支进行测试等,最终到发布的生产分支。
提前感谢您的帮助
答案 0 :(得分:22)
我建议您创建Staging / Support存储库的本地克隆。然后将项目存储库添加为其他远程存储库,这允许您在本地存储库中与它们进行交互。在本地进行合并并将结果推送到Staging存储库。
这可以通过以下步骤来实现。
$ git clone -o staging http://staging
这会克隆您的暂存存储库。您需要替换" http://staging"使用正确的Staging / Support存储库URL。您可能还想提供将存储库克隆为另一个参数的路径。参数-o确保调用远程存储库" staging"这有助于以后将其与项目存储库区分开来。
下一步是添加要合并的远程存储库(在本例中为"示例项目2")
$ git remote add project2 http://sampleproject2
再次,替换" http://sampleproject2"使用存储库的URL"示例项目2"。您还可以更改" project2",这是远程存储库的名称,以更好地适应您的项目。
执行此操作后,git branch -r
将显示staging和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
才能看到结果。如果它适合您的预期,您可以将其推送到Staging存储库:
$ 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
用于获取这些更改。 fetch和pull之间的区别在于pull还将更新分支的本地副本。由于没有project2分支的本地副本,因此fetch是可行的方法。 (事实上git pull
只是git fetch
和git merge
)的快捷方式。
如果您已拥有包含代码的存储库的本地副本,则还可以将其用于合并过程。您只需要确保不要混淆本地开发和合并,也许您需要处理更多的远程存储库,因为您有更多的开发。
本地分支staging_UAT也可以被称为UAT,这使得推送变得更加简单(在这种情况下git push
就够了)。然而,这可能会令人困惑,因为在多个遥控器中存在具有此名称的分支。
或者,您可以更改设置" push.default"。请参阅文档以了解这将如何影响您的推动。