如何非交互式地压制一个历史悠久的git分支(合并前)?

问题描述 投票:0回答:1

有点背景。

我的公司有一个很大的git仓库。我们在一个分支上做开发(希望是短命的),然后执行合并(不压制)到主干。不幸的是,现在我们有一个项目在自己的分支上生活了几个月。多个开发者为它做出了贡献,它有超过一百个提交。其中有几十个提交是从主干分支合并过来的,并且与我们自己的提交交错在一起。

现在我们想把所有这些代码都合并到主文件中--但是是以所有小提交的形式。我们想把它们压制住。然而,我们面临着来自DevOps的反对。合并是由工具自动完成的,而DevOps坚持认为git的 "压制和合并 "操作会导致问题。简而言之,他们不愿意为我们做任何压制和重构。我们完全可以接受失去所有的个人提交历史。但任何弄乱主文件的可能性(或引入错误的合并)都应该被消除。

如何才能在合并之前自动压制拉取请求中的提交?

我知道我们可以做 "git rebase",但这将是一个手动的过程,要检查所有100多个提交。容易出错。对我们来说不够好。

当运行 "git diff "时,我可以看到我们的分支和主分支之间的所有变化,漂亮而干净。有没有一种方法,可以将所有的修改

  1. 把所有的修改都转化为一个提交。
  2. 自动完成(不需要人工输入)。
  3. 重写分支历史(最终应该是主干重归于主干+1个大提交,而不是100多个小提交)。
  4. 所有这些都是在合并前(而不是在合并过程中)在分支上完成的。
git pull-request
1个回答
2
投票

如果你想要的是一个单一的提交,将所有与主版本的差异作为一个单一的提交,你可以这样做。

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"

然后你就完成了 你的分支是在主干上的单一提交,没有任何麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.