从分支中提取所有提交,将指定的提交推送到另一个提交

我有以下分支机构:

  • master
  • production
  • 和以下远程分支机构:

  • origin/master
  • origin/production
  • 我有一个脚本可以获取origin/master分支,并获取从最后一次获取( log -p master..origin/master )更改的内容。 然后我合并origin/master

    发现的提交被推送到代码审查工具。

    我想把成功的承诺 - 只有他们 - 推到生产部门,当然还有origin/production

    我该怎么做?

    另外,我还运行了2个脚本:从origin/master获取的脚本,push将细节提交到数据库并合并,另一个我正在编写的脚本将推动成功的提交。

    我想让这两个脚本运行,同时避免竞争条件/合并冲突。 由于我只想使用指定的提交,也许有办法摆脱我不想要的提交?


    我认为你正在寻找的术语是“樱桃树”。 也就是说,从一个分支的中间进行一次提交并将其添加到另一个分支:

    A-----B------C
     
      
       D
    

    A-----B------C
     
      
       D-----C'
    

    这当然可以用git cherry-pick命令来完成。

    这个提交的问题在于git认为提交包含所有历史记录 - 因此,如果您有三次提交,如下所示:

    A-----B-----C
    

    并尝试摆脱B,你必须创建一个全新的提交,如下所示:

    A-----------C'
    

    其中C'具有不同的SHA-1 ID。 同样,樱桃挑选从一个分支到另一个分支的提交基本上涉及生成一个补丁,然后应用它,从而以这种方式丢失历史。

    提交ID的这种改变会破坏git的合并功能(尽管如果使用的话会有启发式方法,但会对此进行讨论)。 更重要的是,它忽略了函数依赖关系 - 如果C实际使用了B中定义的函数,那么您永远不会知道。

    也许一个更好的方法来处理这个问题将是更细粒度的分支。 也就是说,不是只有'主',而是'featureA','bugfixB'等。对整个分支执行代码审查 - 每个分支都非常专注于做一件事 - 然后合并一个分支,当你完成。 这是git所设计的工作流程,以及它的优点:)

    如果你坚持要在补丁级别处理事情,你可能需要看看darcs--它认为库是一套补丁,因此樱桃采摘成为基本操作。 然而,这有它自己的问题,如很慢:)

    编辑:另外,我不确定我理解你的第二个问题,关于这两个脚本。 也许你可以更详细地描述它,可能作为一个单独的问题,以防止令人困惑?


    我意识到这是一个古老的问题,但在这里引用:如何合并Git中的特定提交

    因此,一个更新的答案:使用功能分支和拉请求。

    这看起来像什么,其中fA是提交功能A,而fB是提交功能B:

                fA   fC (bad commit, don't merge)
               /   /
    master ----A----B----C
                      /
                     fB
    

    Pull请求与GitHub的功能相关联,但我的意思是,有人有责任将功能分支合并到主服务器中。

    链接地址: http://www.djcxy.com/p/46965.html

    上一篇: Pull all commits from a branch, push specified commits to another

    下一篇: How can I render multiple URL's into a single PDF