Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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 合并功能分支而不从公共祖先分支回来?_Git_Github_Version Control_Merge - Fatal编程技术网

Git 合并功能分支而不从公共祖先分支回来?

Git 合并功能分支而不从公共祖先分支回来?,git,github,version-control,merge,Git,Github,Version Control,Merge,假设我有一个非常简单的分支情况,像这样,有一个开发分支和一个生产分支,在过去的某个时候,有一个共同的祖先叫做common: D1---D2---D3---D4---F1'---F2' [feature, dev] / ...---COMMON \ P1---P2---P3---P4 [production] D1---D2---D3---D4---F1

假设我有一个非常简单的分支情况,像这样,有一个开发分支和一个生产分支,在过去的某个时候,有一个共同的祖先叫做common:

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
现在,是时候制作一个新功能了。我们希望该功能现在就在开发中,一个月后就可以投入生产。简单的做法是将功能从common分支,然后在需要时将其合并到开发和生产中:

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
但这一次,我不想这么做。我不想这样做,因为自从common之后,开发人员和生产人员都发生了很大的变化,所以在common之外开发这个特性将是一件非常痛苦的事情

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
我真正想做的是,在树的后面的某个点上开发它,就像这样,只是为了我自己的幸福,这样当我制作这个功能时,dev的所有新更新都可以出现:

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
现在,这当然可以用于将功能合并到dev中,但是当我将此功能合并到生产中时,它将从dev中带来一大堆我不想要的东西

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
一种解决方案是合并开发和生产。但我真的不想这么做。我需要关于dev的资料,但这些资料不在生产中,可能需要很长时间

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
诚然,我想要的东西只有在逻辑上是可能的,只要该特性不干扰开发或生产中可能发生冲突的任何东西。但事实并非如此。它将与两者兼容,并且我对dev所做的更改,因为common甚至与该功能无关。我只是想让他们在我做特写的时候出现。我不想每次想测试任何东西时都要不断地将该特性合并到dev中

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
它将与两者兼容,并且我对
dev
所做的更改,因为common甚至与
功能不相关

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
这意味着您可以从
dev
开始,然后,当您想在
prod
中合并
feature
时,您可以在
prod
上重新设置
feature
的基础

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]

这样,您将只在
prod
上提交功能提交,这可以合并
功能
(快进合并)

假设您的
功能
分支从
开发
分支的某个点引入2次提交:

                            F1---F2 [feature]
                           /
               D1---D2---D3---D4 [dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
如果你的目的是

               D1---D2---D3---D4---F1'---F2' [feature, dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]
  • 将该功能集成到
    dev
    分支中
  • 将功能集成到
    生产
    分支中
  • dev
    分支合并到
    production
    分支中
  • 根据您希望历史记录显示的内容,完成此操作的方法不止一种。假设您希望最小化非快进合并的数量,请从以下几点开始:

    git rebase dev feature
    git checkout dev
    git merge feature
    
                   D1---D2---D3---D4---F1'---F2' [feature, dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4 [production]
    
    你会有

                   D1---D2---D3---D4---F1'---F2' [feature, dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4 [production]
    
    然后,如果您想在
    production
    分支中使用该功能,但还不想合并
    dev
    分支,请执行以下操作:

                   D1---D2---D3---D4---F1'---F2' [feature, dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4 [production]
    
    git rebase --onto production <Commit ID of D4> feature
    git checkout production
    git merge feature
    
    最后,您可以将
    dev
    分支与以下内容集成:

                   D1---D2---D3---D4---F1'---F2' [feature, dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4 [production]
    
    git rebase production dev
    git checkout production
    git merge dev
    
    您将有:

                   D1---D2---D3---D4---F1'---F2' [feature, dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4 [production]
    
    ...---COMMON---P1---P2---P3---P4---F1''---F2''---D1'---D2'---D3'---D4'
                                               |                        |
                                           [feature]            [production, dev]
    
    当然,如果您有冲突,您需要相应地合并它们。请参阅,以避免两次提交具有相同的作者、日期和消息

                   D1---D2---D3---D4---F1'---F2' [feature, dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4 [production]