Ste*_*pan 24 git merge branch rebase
我们有项目(PHP应用程序),但每个客户端的安装程序各不相同,有时很少,有时甚至更多.不过,源代码的很大一部分很常见.我们将特定安装作为并行分支管理到主分支,我们需要将更改从主分支传输到其他分支.在Git中解决了相同的情况:如何维护(大部分)并行分支只有一些区别?投票最多的解决方案是以这种方式在分支之间转移变更:
git pull
git checkout local
git rebase master
Run Code Online (Sandbox Code Playgroud)
如解决方案中所提到的,它在变基后创建非快进推送,我发现非常令人不快的并发症.我的问题是 - 为什么不这样做:
git pull
git checkout local
git merge master
Run Code Online (Sandbox Code Playgroud)
Old*_*her 23
我们的想法是使用一个公共分支,以及两个(或根据您的需要)客户特定分支.所有常见更改都会进入主数据库,每个客户分支都会获得仅与该客户相关的更改.定期(当主设备被认为处于稳定点时),您将从主设备合并到客户分支(
git checkout custA; git merge master).这将更新的"通用"代码引入客户分支.你永远不会以其他方式合并 - 这会污染主人与客户特定的代码.当您向客户A交货时,您将结帐"custA"分支并发送.当然,对于其他客户也是如此.
现在假设您获得了一个新客户"C",稍后发现了客户A和C想要的功能,但B却没有.你创建(也就是"fork")master()的分支
git checkout -b AC_feature master,代码/测试它,随时进行提交,然后将它合并到A和C(git checkout A; git merge AC_feature and similarly for customer C)中.你没有在A中编码,然后依赖于将A合并到C中,因为这会将所有的A都带入C.如果稍后您在该功能中发现了一个小错误,则在同一分支(
git checkout AC_feature; edit/test/commit)中进行更改,然后将其合并到custA和custC中,如上所述.
资料来源:这些来自Gitolite开发商--Sitaram Chamarty的清晰而有用的文章,部分内容来自Junio Hamano(Linus Torvalds的合作伙伴维护Git)的直接输入.
维护并行客户分支:
http://gitolite.com/archived/special-branches.html
关于"修复"共同和客户分支的后续文章:
http://gitolite.com/archived/special-branch-fixups.html
这真的取决于你想对分支做什么.是的,如果您在本地重新定位,它将在重新定位后创建非快进推送.另一方面,你将继续保持一系列不同的变化,你的分支上的内容将是一系列变化,如果他们已经进入最新的主要领导.
相反,将主人与地方合并将使当地人与主人及时前进,并将记录历史.如果你需要能够重建过去的本地状态,那么你会想要这样做.历史永远不会改变.但是,你将有一个更复杂的历史来处理.