Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git SourceTree:更新develop和master,当两者都远远落后于活动分支时_Git_Atlassian Sourcetree_Git Flow - Fatal编程技术网

Git SourceTree:更新develop和master,当两者都远远落后于活动分支时

Git SourceTree:更新develop和master,当两者都远远落后于活动分支时,git,atlassian-sourcetree,git-flow,Git,Atlassian Sourcetree,Git Flow,我发现自己在一个项目中,试图使用 git流方法来维护代码。 由于在项目开始时没有严格遵循git流策略,开发分支比最新的功能分支晚了几个月,而主分支甚至比开发分支更晚。功能-分支被用作代码部署的分支 现在的问题是:使用SourceTree,更新开发和主分支的最佳方法是什么,以便它们基本上与用于部署的最新功能分支完全相同?我不认为develope或master中的任何内容有用,因为它们已经过时,而且有太多的更改,所以它们似乎都需要完全重写。因为您不需要master或develope中的更改,

我发现自己在一个项目中,试图使用<强> git流<强>方法来维护代码。

由于在项目开始时没有严格遵循git流策略,
开发
分支比最新的
功能
分支晚了几个月,而
分支甚至比
开发
分支更晚。
功能-
分支被用作代码部署的分支


现在的问题是:使用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是的,大多数情况下。更新我的答案以澄清。