3

其他人可以更好地改写这个问题,但这是我想做的:

我一直在研究一个长期存在的主要重构分支 B。我一直在定期合并 master,现在分支 B 比 master 领先大约 200 次提交。我现在准备发送拉取请求,但我想稍微清理一下我的提交历史记录。基本上我想将我所有的 ~200 个提交压缩成 3 个提交:

  • 提交 1 = 已删除的所有文件
  • 提交 2 = 所有新添加的文件
  • 提交 3 = 其他所有内容,即所有移动/编辑的文件

而且,为了不搞砸,我想在我自己的分支 B 的单独分支上进行历史重写,并将该分支作为我的拉取请求发送。

我可以在 git 中实现这一目标的最简单方法是什么?

4

2 回答 2

3

假设您要合并到master

  1. 创建并签出一个新分支:

    git checkout -b going-to-squash
    
  2. 变基到主人

    git rebase --squash master
    
  3. 重置到主分支

    git reset master
    
  4. 现在,您的整个压扁分支将处于未提交状态。

    现在创建你的新提交。

    我会在这一步使用 gui,但它在命令行上完全可行。

于 2012-10-04T06:05:04.480 回答
1

A git rebase --interactive(如Pro Git book 中所述)不实用,因为它允许选择或压缩提交(不是提交的一部分)

另一种方法可能是生成一个巨大的补丁(如git format-patch origin/master),然后解析该文件生成 3 个补丁文件:

  • 一个包含所有删除
  • 一个包含所有添加的
  • 其余的部分

然后,您可以从提交的branch B来源创建一个分支(请参阅“参考 Git 分支开始提交”),并应用这三个补丁。

于 2012-10-04T05:58:33.533 回答