如何以非交互方式挤压具有长历史的git分支(合并之前)?

如何以非交互方式挤压具有长历史的git分支(合并之前)?,git,pull-request,Git,Pull Request,一点背景知识 我的公司有一个大型git存储库。我们在一个分支上进行开发(希望很短),然后对主分支执行合并(没有挤压)。不幸的是,现在我们有一个项目在它自己的分支上运行了几个月。多个开发人员对此做出了贡献,并且提交了超过100次。这些提交中有几十个是来自master的合并,它们与我们自己的提交交织在一起 现在,我们希望将所有这些代码合并到主代码中,但是以所有小提交的形式。我们想把它们压扁。然而,我们面临着来自DevOps的反对。合并是由一个工具自动完成的,DevOps坚持认为git的“挤压和合并”

一点背景知识

我的公司有一个大型git存储库。我们在一个分支上进行开发(希望很短),然后对主分支执行合并(没有挤压)。不幸的是,现在我们有一个项目在它自己的分支上运行了几个月。多个开发人员对此做出了贡献,并且提交了超过100次。这些提交中有几十个是来自master的合并,它们与我们自己的提交交织在一起

现在,我们希望将所有这些代码合并到主代码中,但是以所有小提交的形式。我们想把它们压扁。然而,我们面临着来自DevOps的反对。合并是由一个工具自动完成的,DevOps坚持认为git的“挤压和合并”操作可能会导致问题。简言之,他们不会为我们做任何压榨或回扣。我们完全可以放弃我们所有的个人历史。但应该消除任何扰乱主系统(或引入错误合并)的可能性

在进行合并之前,如何自动挤压拉取请求的提交?

我知道我们可以做“git rebase”,但这将是一个手动过程,需要完成所有100多个提交。容易出错。对我们来说还不够好

当运行“gitdiff”时,我可以看到我们的分支和主分支之间的所有变化,很好,很干净。有没有办法:

  • 将所有这些更改转换为一次提交
  • 自动完成(过程中无需人工输入)
  • 通过重写分支历史记录(最终应该是主重定基加1次大提交,而不是100次小提交)
  • 在合并之前(而不是合并期间)对分支执行所有操作

  • 如果您只需要一次提交,而该提交与作为一次提交的主提交完全不同,则可以执行以下操作:

    git checkout the-branch
    git merge master -m "get the latest from master"
    # set our branch _pointer_ on master, do not change a comma from our working tree
    git reset --soft master
    # at this point, all the differences between master and the other branch are on index, ready to be committed
    git commit -m "single commit with all changes"
    

    你就完了。您的分支是在master上的一次提交,没有任何麻烦。

    如果您想要的是一次提交,它与master作为一次提交有所有不同,那么您可以执行以下操作:

    git checkout the-branch
    git merge master -m "get the latest from master"
    # set our branch _pointer_ on master, do not change a comma from our working tree
    git reset --soft master
    # at this point, all the differences between master and the other branch are on index, ready to be committed
    git commit -m "single commit with all changes"
    

    你就完了。您的分支在master上是一个单一的提交,没有任何麻烦。

    谢谢,这正在工作。还有一件事,为了完成它,我需要使用“gitpush--force”来推送到您的远程分支?是的,推到远程分支。最终目标是以最少的提交次数合并到父(主)分支。谢谢,这是可行的。还有一件事,为了完成它,我需要使用“gitpush--force”来推送到您的远程分支?是的,推到远程分支。最终目标是以最少的提交次数合并到父(主)分支。