作者通过 Git Squash 顺序提交来压缩历史记录

Ran*_*jan 5 git github rebase git-squash

我的团队正在开发一个长期运行的功能分支,它现在有数百个提交,现在我需要将它合并到 master 中以进行生产发布。

我不想在那个分支中有那么多提交,因为许多提交是为了修复错误而完成的,并且每次提交只更改几行。

在 Github 上的 PR 创建页面上,它限制了显示为 250 的提交。

来自 Github - “这个比较很大!我们只显示最近的 250 次提交”

因此,我决定以一种将作者的一组顺序提交压缩为单个提交的方式压缩历史记录。

例如,假设我们有这样的提交:A - A - A - B - B - A - C - D - D - B- B -A来自作者 A、B、C 和 D,那么生成的提交日志将有 A (3) - B(2) - A - C - D (2) - B(2) - A,其中 X`(N) 是 N 个提交的压缩提交来自作者 X。

编辑:我知道这将需要一个脚本,我正在寻找相同的。我不想通过交互式 rebase 来做同样的事情。

Ran*_*jan 0

安慰:

git log --format="p|%h|%an|%s" --no-merges -n 190 | tail -r  > commits.txt
Run Code Online (Sandbox Code Playgroud)

PHP:

$fp = fopen("./commits.txt", "r");

$commits = array();
$previous_author = '';
while (($line = fgets($fp)) !== FALSE) {
  list($mode, $sha, $current_author, $subject) = explode('|', $line);
  if ($previous_author == '' || $previous_author !== $current_author) {
    $previous_author = $current_author;
  }
  else {
    $mode = 'f';
  }
  $output[] = implode(' ', array($mode, $sha, $subject));
}

fclose($fp);

print implode(' ', $output);
Run Code Online (Sandbox Code Playgroud)

安慰:

git rebase -i HEAD~190
Run Code Online (Sandbox Code Playgroud)

在交互式编辑器中,删除所有内容并粘贴上面 php 脚本的输出。我可以达到预期的结果。