Git SourceTree:更新develop和master,当两者都远远落后于活动分支时
我发现自己在一个项目中,试图使用<强> git流<强>方法来维护代码。Git SourceTree:更新develop和master,当两者都远远落后于活动分支时,git,atlassian-sourcetree,git-flow,Git,Atlassian Sourcetree,Git Flow,我发现自己在一个项目中,试图使用 git流方法来维护代码。 由于在项目开始时没有严格遵循git流策略,开发分支比最新的功能分支晚了几个月,而主分支甚至比开发分支更晚。功能-分支被用作代码部署的分支 现在的问题是:使用SourceTree,更新开发和主分支的最佳方法是什么,以便它们基本上与用于部署的最新功能分支完全相同?我不认为develope或master中的任何内容有用,因为它们已经过时,而且有太多的更改,所以它们似乎都需要完全重写。因为您不需要master或develope中的更改,
开发
分支比最新的功能
分支晚了几个月,而主
分支甚至比开发
分支更晚。功能-
分支被用作代码部署的分支
现在的问题是:使用SourceTree,更新
开发
和主
分支的最佳方法是什么,以便它们基本上与用于部署的最新功能
分支完全相同?我不认为develope
或master
中的任何内容有用,因为它们已经过时,而且有太多的更改,所以它们似乎都需要完全重写。因为您不需要master
或develope
中的更改,最简单的解决方案是在这些分支上进行硬重置
master
,切换到它使用模式
下拉列表切换到硬-放弃所有工作副本更改
,然后单击确定开发
的过程
另一种方法是删除分支并重新创建它们
master
分支删除母版
强制删除
框,然后单击确定开发
重复此过程
然后,获取用于生产部署的功能-*
分支,并将其重命名为master
:
功能-*
分支重命名功能-*…
master
并单击OK功能-*
分支,请将其重命名为develope
这里的主要区别是您将不再具有功能-*
分支,这可能是您所需要的,也可能不是
对历史的影响
假设您的历史如下所示:
... A--B [master]
/
*--*--*--C--D [develop]
\
*--* ... *--*--* [feature-1] (should be develop)
\
*--*--* [feature-2] (should be master)
... A--B
/
*--*--*--C--D
\
*--* ... *--*--* [develop, feature-1]
\
*--*--* [master, feature-2]
按照上述说明操作后,您的历史记录如下所示:
... A--B [master]
/
*--*--*--C--D [develop]
\
*--* ... *--*--* [feature-1] (should be develop)
\
*--*--* [feature-2] (should be master)
... A--B
/
*--*--*--C--D
\
*--* ... *--*--* [develop, feature-1]
\
*--*--* [master, feature-2]
(其中,feature-1
和feature-2
可能不再存在,具体取决于您选择的解决方案。)
移动或删除分支时,不会立即删除提交。因此,提交的
A
、B
、C
和D
仍然存在,您只是没有一个简单的方法来获取它们。一段时间后,这些提交将由Git进行垃圾收集,因此如果您想保留它们,请确保在那里添加分支或标记。因此,硬重置选项相当于在master
中“擦除”旧代码。@mg1075是的,大多数情况下。更新我的答案以澄清。