git - merge 后压缩 Git 提交

标签 git branching-and-merging git-rewrite-history

我有一个功能分支,其中包含一些提交(见下文)。自分支以来,一些提交也已添加到 master。

所以我将 master merge 到 feature 分支。

git checkout feature
git merge master

这会在 feature 分支上产生以下日志历史记录:

*    E (HEAD) merging master into feature
|\
| *  D feature commit 2
| |
| *  C feature commit 1
* |  B master commit 2
|/
*    A master commit 1

实际上,功能路径上的提交数量很大 (100+),我想将它们全部压扁。

有没有办法只压缩功能分支上的提交,同时保留 master 行上的提交?

最佳答案

是的,你可以。所以你想把你问题中的提交图变成这个新图:

*    E (HEAD) merging master into feature
|\
| *  D feature commit (squashes 1 and 2)
* |  B master commit 2
|/
*    A master commit 1

过程:

  1. 确保您的工作树是干净的。没有未提交的更改、没有暂存的更改、没有未跟踪的文件。
  2. 确保您在功能分支上。
  3. git reset --hard *功能分支上 D 的哈希值*
  4. git reset --soft *A 在 master 上的哈希值*
  5. git commit 包含您想要的消息。
  6. git merge master

关于git - merge 后压缩 Git 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512202/

相关文章:

git - 如何 merge git 用户?

visual-studio - 如何从TFS项目创建分支(从带标签的版本)

重命名文件夹后的 Git 过滤

git - merge Git 存储库的前两个提交?

git - 在命令行中看不到 git 分支

git - 如何更改 git 子模块跟踪远程分支?

git - 从 git 存储库中删除特定分支的整个历史记录

GitHub pull 请求 : How to merge and fast-forward to avoid "recent changes" and diff notifications

version-control - Perforce 中类似 Mercurial 的命名分支体验

git - 如何从 Git 存储库的提交历史记录中移除/删除大文件?