'git squash'(推后)重写历史吗?

时间:2015-04-28 15:52:30

标签: git version-control merge squash git-rewrite-history

我正在为功能开发一个单独的分支。

现在我想在 main 分支中使用此功能,但只需将所有提交压缩为单个提交(回顾提交消息)。

问题是我已经push将分支编辑为remote 。 所以我不确定我是否可以执行git merge --squash feature(来自分支)或如果可以重写我的git历史记录

如果git merge --squash 只会创建一个新提交(包含作为补丁的合并分支的所有更改,我不会得到。所以以安全的方式),或者如果它将从我的分支中删除旧提交或只是对git历史记录进行任何更改。 (我希望避免这种情况,因为我在团队中工作)。

我应该选择commit-range cherry-pick而不是git squash吗? (但樱桃选择只会复制所有提交而不会压缩它们)

或者与壁球合并是好的? (即使在推送到远程功能分支后)

我希望将功能分支集成为我的分支中的单个提交(可能包含--squash提供的所有提交消息) ,但没有重写历史。

1 个答案:

答案 0 :(得分:1)

不会重写历史记录。在高级命令中,只有git rebasegit commit --amend执行历史记录重写。

git merge --squash只是准备一个工作树,其中包含您要合并的分支的所有信息,正如文档所述:

  

生成工作树和索引状态,好像发生了真正的合并(合并信息除外),但实际上没有提交或移动HEAD,也没记录$ GIT_DIR / MERGE_HEAD导致下一个git commit命令创建合并提交。这允许您在当前分支之上创建单个提交,其效果与合并另一个分支相同(或者在章鱼的情况下更多)。