压缩Git在合并后提交

时间:2015-11-04 01:29:28

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

我有一个功能分支,有一些提交(见下文)。从分支开始,一些提交也被添加到掌握中。

所以我将master合并到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行上的提交?

2 个答案:

答案 0 :(得分:3)

是的,你可以。因此,您希望将问题中的提交图转换为这个新图:

*    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 *Hash of D on feature branch*
  4. git reset --soft *Hash of A on master*
  5. git commit带有您想要的信息。
  6. git merge master

答案 1 :(得分:0)

问题只解决了所有提交都只存在于本地存储库中的情况,问题(除了我的评论)已得到解决。如果仅涉及区域设置git存储库,则等同于:

git checkout feature
git rebase -i
      // mark all commits to be squashed
git merge master

但是您应该将母分支重置为E才能发布您的更改:

git checkout master
git reset --hard feature

或(如果您真的更喜欢与平民主义者共事)git reset --hard *Hash of E*。如果git reset已被推送到远程存储库,我将检查是否使用C