SourceTree:当 develop 和 master 都落后于活动分支时更新 develop 和 master

SourceTree: updating develop and master when both are way behind active branch

我发现自己正处于一个尝试使用 git-flow 方法维护代码的项目中。

因为在项目开始时没有密切关注 git-flow 策略,develop 分支比最新的 feature 分支晚了几个月,master 分支甚至更落后于 develop 分支。 feature- 个分支被用作代码部署的分支。

现在的问题是:使用 SourceTree,更新 developmaster 分支的最佳方法是什么,以便它们与最新的 feature 用于部署的分支?我在 developmaster 中看不到任何有用的东西,因为它们已经过时并且发生了很多变化,所以看起来它们都需要被完全覆盖。

由于您不需要 masterdevelop 的更改,最简单的解决方案是对这些分支进行硬重置。

  1. 在左窗格中双击 master 切换到 master
  2. 在 Log/History 视图中找到已部署到生产环境的最新提交。
  3. 右键单击该提交并单击 Reset current branch to this commit
  4. 在确认对话框中,将 Using mode 下拉列表切换为 Hard - discard all working copy changes,然后单击确定。

并为 develop 重复该过程。


另一种方法是删除分支并重新创建它们。

  1. 右键单击左侧窗格中的 master 分支。
  2. 点击Delete master
  3. 在确认对话框中,如果分支有未合并的更改,请选中 Force delete 框,然后单击“确定”。

develop 重复该过程。

然后,将用于生产部署的 feature-* 分支重命名为 master:

  1. 右键单击相关 feature-* 分支。
  2. 点击Rename feature-*...
  3. 输入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-1feature-2 可能不再存在,具体取决于您选择的解决方案。)

当您移动或删除分支时,不会立即删除提交。所以提交 ABCD 仍然存在,您只是没有简单的方法来获取它们。一段时间后,这些提交将被 Git 垃圾收集,因此如果您想保留它们,请务必在此处添加分支或标记。