Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 - Fatal编程技术网

Git 如何从拉取请求中排除不必要的提交?

Git 如何从拉取请求中排除不必要的提交?,git,github,Git,Github,我在使用git分支时遇到了一个问题。我发送了PR以将开发分支合并到主分支,但它包含了不必要的提交。我想从公共关系中删除这些 我从主分支创建了开发分支,并添加了D1、D2提交。最后,我使用“挤压和合并”将开发分支合并到主分支 我从“开发”分支创建了一个要素分支,并添加了F1、F2 同时,另一个人向主分支添加了M4 commit 我发送了一个请求将功能分支合并到master。然而,该PR包括D1、D2、F1和F2提交 我必须从master创建特性分支。这是我的错误:( 除了D1和D2之外,我如何只包

我在使用git分支时遇到了一个问题。我发送了PR以将开发分支合并到主分支,但它包含了不必要的提交。我想从公共关系中删除这些

  • 我从主分支创建了开发分支,并添加了D1、D2提交。最后,我使用“挤压和合并”将开发分支合并到主分支
  • 我从“开发”分支创建了一个要素分支,并添加了F1、F2
  • 同时,另一个人向主分支添加了M4 commit
  • 我发送了一个请求将功能分支合并到master。然而,该PR包括D1、D2、F1和F2提交
  • 我必须从master创建特性分支。这是我的错误:(


    除了D1和D2之外,我如何只包括F1和F2提交?

    只要D1、D2更改已经合并到主控中,就可以通过新的拉取请求再次发送它们(D1、D2不被视为更改)

    然而,在您的案例中,您需要使用M1 Commit重新设置开发分支的基础,这样您的PR就会用所有东西更新,而GIT只会将F1和F2检测为新的东西


    最简单的方法就是从Master创建一个PR进行开发,并在拉出更新后将其合并。

    因为您与第一个PR进行了挤压合并,Git不知道D1和D2已经包含在Master分支中

    您需要
    rebase--on
    feature分支到主分支的(最新)提交:

    结果如下所示:

    ───M1───M2───M3───S────────────M4 (master)
        └────D1───D2──┘ (develop)   └────F1───F2 (feature)
    
    现在,您可以
    push--force
    您的功能分支并更新您的PR。或者关闭旧的PR并使用当前功能分支创建一个新的PR


    顺便说一句:从您的分支名称来看,我假设您使用的是一种GitFlow分支模型。在这种模型中,您不应该使用挤压合并将开发分支合并到主控中,因为对于已合并的提交,您将始终存在此问题。

    请PR的作者创建最新主控的另一个分支(或存储库中的目标分支)

    作者必须选择所需的提交,并在需要时进行挤压并提交

    作者发送了一份新的PR

    是正确的,但所有这些稍微花哨(使用方框字符集)的图表都有点不对劲,从您自己的开始:

    原因是:

    …我使用“挤压和合并”将开发分支合并到主分支

    clicky GUI上的“挤压和合并”按钮,或命令行上的“
    git merge--squash
    ”,会生成一个不是合并的新提交。而不是:

    ...--M1--M2--M3--S--M4   <-- master
          \         /
           D1-----D2   <-- develop
    
    我们看到,
    feature
    有四个提交可以从其tip提交(包括tip提交本身)中访问从
    master
    无法访问的,即
    D1-D2-F1-F1
    。无论是否有某个名称指向
    D2
    ,这四个提交都是在
    功能上的四个提交,而
    master
    上没有(提交
    M1
    在两个分支上,其左侧的所有内容也是如此。)

    我认为考虑这一点的一个好方法是,“挤压合并”具有终止刚刚合并的分支的副作用。提交
    D1
    D2
    现在实际上是“死的”而且必须被视为至少有轻微的放射性。因为,它们最终通常是无害的。但是它们会让你的提交历史看起来很丑陋,因为为什么要提交两次,一次是两次单独的提交,然后是一次更大的提交?如果
    功能实际上是合并的,而不是挤压-“合并”-最坏的情况是,由于
    S
    的后代提交中的某些更改,它们可能会在以后导致冲突

    因为合并的分支现在“死了”应该删除它。也就是说,您应该运行
    git branch-D develope
    。但在执行此操作之前,请确保提交
    D1
    D2
    本身不包含在任何其他分支中,当然,在您的情况下,它们是包含在其他分支中的。如果它们包含在其他分支中,则必须将这些分支重新构建为不再有这两项承诺

    请注意“重新设置基础并合并”(GitHub上的另一个clicky按钮实际上所有三个按钮都组合成一个带有内部下拉菜单的按钮,但这只是表示三个不同按钮的一种方式)另外还有杀死分支的副作用,因为rebase实际上意味着将旧的提交复制到新的提交,然后停止使用旧的提交以支持新的副本

    我会以这种方式将post-
    git-rebase——绘制到主开发功能图上,保持图片中的“dead”
    develope

                           F1'-F2'  <-- feature
                          /
    ...--M1--M2--M3--S--M4   <-- master
           \
            D1--D2   <-- develop
                  \
                   F1--F2   [abandoned]
    

    F1'-F2“将开发基础重新设置为母版”是什么意思?我认为这是“将开发分支的头移到M4”,对吗?不对。它复制提交
    F1
    F2
    在母版的顶部,将特征分支的头设置为新的
    F2
    提交,请参见
    ───M1───M2───M3───S────M4 (master)
       └────D1───D2───┘ (develop)
                 └────F1───F2 (feature)
    
    ...--M1--M2--M3--S--M4   <-- master
          \         /
           D1-----D2   <-- develop
    
    ...--M1--M2--M3--S--M4   <-- master
           \
            D1--D2   <-- develop
    
    ...--M1--M2--M3--S--M4   <-- master
           \
            D1--D2--F1--F2   <-- feature
    
                           F1'-F2'  <-- feature
                          /
    ...--M1--M2--M3--S--M4   <-- master
           \
            D1--D2   <-- develop
                  \
                   F1--F2   [abandoned]