我正在使用“Git Flow”分支模型,主分支和开发分支。我正在开发一个主要的新版本,所以我的开发分支与我的主分支完全不同。每当我需要在主分支上创建一个修补程序并将其合并回develop时,这就会产生问题。几乎总是存在冲突,它正在成为一种真正的痛苦。
管理此问题的最佳方法是什么?我可以更容易地手动开发小修补程序,然后在我准备好时将所有内容合并到master中,而不将master重新合并到develop中。这可能吗?
答案 0 :(得分:50)
从一个分支到另一个分支的某些提交的最简单方法是cherry-picking。
假设master
中的修补程序具有提交哈希HASH
,并且您希望将该修补程序带入devel
分支,请执行git checkout devel
后跟{{ 1}}。就是这样。
如果您想将所有更改从git cherry-pick HASH
转移到master
,您可以通过
devel
如果你有相反的情况(你在git checkout devel
git rebase master
分支的开发过程中制作了一个修补程序,并希望在devel
完全合并到master
之前将该修补程序带入devel
}),工作流程非常相似。假设此修补程序具有散列master
,请执行以下操作:
HOTFIX_HASH
现在,提交存在于git checkout master
git cherry-pick HOTFIX_HASH
和master
中。要解决此问题,请键入
devel
并且提交将从git checkout devel
git rebase master
中消失,因为它已经存在于devel
中。
答案 1 :(得分:11)
我遇到这种情况的一般工作流程是创建bug-fix
master
分支来修复问题。准备就绪后,将其合并回master
,然后将master
合并到develop
。
这假设您的错误修复几乎是两个分支中需要更改的代码之间的一对一。如果是这种情况,您可以随时在git merge -s ours master
中尝试develop
(请参阅man-page),以便develop
分支优先。
我使用类似的过程来管理我正在开发的开源项目上的错误修复版本。 master
始终领先于需要应用错误修复的位置,因此我从需要修复的标记创建分支,应用修复和发布,然后重新标记并将新标记合并到master
。由于版本号,这会导致冲突,但可以使用上面的命令避免冲突。
希望有所帮助。
答案 2 :(得分:6)
我通常遵循这个guide,这在大多数情况下非常适合,并避免出现冲突和大更改问题的市长。
如果您可以在feature
分支上工作,并且仅在创建development
分支之前将其合并到release
中(意味着您实际上正准备发布)...此方法应该避免您遇到的大多数合并冲突。
由于在feature-breaking
分支上发生了重大更改,因此在feature-breaking
分支合并到开发中时,您可能只会遇到一次冲突。您也可以随时将development
合并到release
分支中以保持更新。
根据development
所有hotfix-branch
你所拥有的最小或非冲突,你也会很酷。
我之前在链接上分享的指南非常强调从不从development
合并到master
或向后合并。始终通过release
分支处理您的版本。
答案 3 :(得分:0)
这一切都取决于您将如何使用GIT来管理代码,发布计划和版本。最佳做法是让title: new GestureDetector(
child: new IgnorePointer (
child: new TextField(
controller: searchController,
decoration: new InputDecoration(
hintText: 'Buscar parcela', border: InputBorder.none),
))),
onTap: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => new EstatesPage(
parcela: widget.parcela,
dropdownItem: dropdownSelection)));
},
分支保存您的生产级别代码,让master
分支进行开发,让develop
分支从release
分支来处理您的即将到来的工作发行版和develop
分支从hotfix
分支出来,以处理生产代码的紧急修复程序。因此,master
和release
分支最终将被合并回到hotfix
和master
两者中,以确保两个分支都具有更改,以及稍后develop
分支出新的develop
,此新发行版在合并到release
上没有问题。并且标记将始终位于master
上。
使用这种方法,master
和release
分支将被合并两次,并且在合并到hotfix
时有时会看到冲突,如果正在进行许多开发活动,这是不可避免的develop
。缩短develop
或release
分支生命周期可能是减轻此问题的一种方法。如果发生冲突,请使用任何技术解决它,并确保不要更改完成并经过测试的hotfix
或release
代码。