SourceTree:当 develop 和 master 都落后于活动分支时更新 develop 和 master
SourceTree: updating develop and master when both are way behind active branch
我发现自己正处于一个尝试使用 git-flow 方法维护代码的项目中。
- https://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/
- http://nvie.com/posts/a-successful-git-branching-model/
因为在项目开始时没有密切关注 git-flow 策略,develop
分支比最新的 feature
分支晚了几个月,master
分支甚至更落后于 develop
分支。 feature-
个分支被用作代码部署的分支。
现在的问题是:使用 SourceTree,更新 develop
和 master
分支的最佳方法是什么,以便它们与最新的 feature
用于部署的分支?我在 develop
或 master
中看不到任何有用的东西,因为它们已经过时并且发生了很多变化,所以看起来它们都需要被完全覆盖。
由于您不需要 master
或 develop
的更改,最简单的解决方案是对这些分支进行硬重置。
- 在左窗格中双击
master
切换到 master
。
- 在 Log/History 视图中找到已部署到生产环境的最新提交。
- 右键单击该提交并单击
Reset current branch to this commit
。
- 在确认对话框中,将
Using mode
下拉列表切换为 Hard - discard all working copy changes
,然后单击确定。
并为 develop
重复该过程。
另一种方法是删除分支并重新创建它们。
- 右键单击左侧窗格中的
master
分支。
- 点击
Delete master
。
- 在确认对话框中,如果分支有未合并的更改,请选中
Force delete
框,然后单击“确定”。
为 develop
重复该过程。
然后,将用于生产部署的 feature-*
分支重命名为 master
:
- 右键单击相关
feature-*
分支。
- 点击
Rename feature-*...
。
- 输入
master
并点击确定。
如果您有另一个用于开发的 feature-*
分支,请将其重命名为 develop
。
这里的主要区别是您将不再拥有 feature-*
个分支,这可能是您需要的,也可能不是。
对历史的影响
假设您的历史看起来像这样:
... 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 垃圾收集,因此如果您想保留它们,请务必在此处添加分支或标记。
我发现自己正处于一个尝试使用 git-flow 方法维护代码的项目中。
- https://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/
- http://nvie.com/posts/a-successful-git-branching-model/
因为在项目开始时没有密切关注 git-flow 策略,develop
分支比最新的 feature
分支晚了几个月,master
分支甚至更落后于 develop
分支。 feature-
个分支被用作代码部署的分支。
现在的问题是:使用 SourceTree,更新 develop
和 master
分支的最佳方法是什么,以便它们与最新的 feature
用于部署的分支?我在 develop
或 master
中看不到任何有用的东西,因为它们已经过时并且发生了很多变化,所以看起来它们都需要被完全覆盖。
由于您不需要 master
或 develop
的更改,最简单的解决方案是对这些分支进行硬重置。
- 在左窗格中双击
master
切换到master
。 - 在 Log/History 视图中找到已部署到生产环境的最新提交。
- 右键单击该提交并单击
Reset current branch to this commit
。 - 在确认对话框中,将
Using mode
下拉列表切换为Hard - discard all working copy changes
,然后单击确定。
并为 develop
重复该过程。
另一种方法是删除分支并重新创建它们。
- 右键单击左侧窗格中的
master
分支。 - 点击
Delete master
。 - 在确认对话框中,如果分支有未合并的更改,请选中
Force delete
框,然后单击“确定”。
为 develop
重复该过程。
然后,将用于生产部署的 feature-*
分支重命名为 master
:
- 右键单击相关
feature-*
分支。 - 点击
Rename feature-*...
。 - 输入
master
并点击确定。
如果您有另一个用于开发的 feature-*
分支,请将其重命名为 develop
。
这里的主要区别是您将不再拥有 feature-*
个分支,这可能是您需要的,也可能不是。
对历史的影响
假设您的历史看起来像这样:
... 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 垃圾收集,因此如果您想保留它们,请务必在此处添加分支或标记。