Git 将功能分支的历史更改为新分支?

标签 git version-control github branch dvcs

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

我一直致力于长期的主要重构分支 B。我一直在定期 merge master,现在分支 B 比 master 领先约 200 次提交。我现在准备发送 pull 请求,但我想稍微清理一下我的提交历史记录。基本上我想将我所有的 ~200 次提交压缩为 3 次提交:

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

而且,为了不搞砸,我想在我自己的分支 B 之外的一个单独分支上重写这个历史记录,并将该分支作为我的 pull 请求发送。

在 git 中实现此目的的最简单方法是什么?

最佳答案

假设您要 merge 到 master:

  1. 创建并 check out 一个新分支:

    git checkout -b going-to-squash
    
  2. rebase 到 master

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

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

    现在创建您的新提交。

    我会在这一步中使用图形用户界面,但它在命令行上完全可行。

关于Git 将功能分支的历史更改为新分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12720088/

相关文章:

带 Git 的 Spring Cloud 配置服务器 - 无法克隆或 checkout 存储库连接超时

git - 使用 Jenkins Git Publisher 推送标签 - 多个 Git 存储库(fork)

git - 重新设置特定的 SHA1

git - 如果我在推送后 rebase 会发生什么?

python - PyCharm:同窗多项目,独立版本控制

git - Git 会干扰 SVN 吗?

Github 企业 API merge 后删除分支

仅偶尔提交输出文件的 Git 工作流程

clojure - clojure lein:如何在项目中包含另一个目录的源代码?

github - TeamCity 将 GitHub 存储库 check out 到特定的绝对路径