如何非交互式地压缩具有长历史的git分支(在合并之前)



一点背景。

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

现在,我们想将所有这些代码合并到master中,但要以所有小提交的形式。我们想压制他们。然而,我们面临着DevOps的反对。合并是由一个工具自动完成的,DevOps坚持认为git"挤压合并"操作可能会导致问题。简言之,他们不会为我们做任何挤压或重新调整。我们完全可以失去所有的个人承诺历史。但是,应该消除任何扰乱主机(或引入错误合并(的可能性。

在进行合并之前,我们如何自动压缩拉请求的提交

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

当运行"git-diff"时,我可以看到我们的分支和master之间的所有变化,非常干净。有没有办法:

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

如果你只想要一个单独的提交,它与主提交有所有的区别,那么你可以这样做:

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之上的单个提交,没有任何麻烦。

最新更新