"git squash"(推送后)是否会重写提交历史记录?

4

我正在为一个特性开发一个独立的分支。

现在我想要把这个特性合并到我的主分支中,但是只想将所有提交压缩为单个提交(包含摘要信息)。

问题是我已经把该分支push到了远程仓库。

所以我不确定是否可以执行git merge --squash feature命令(从主分支)或者是否会重写我的Git历史记录。

我不确定git merge --squash是否会仅创建一个新提交(安全地包含所有合并分支的更改补丁)。或者它是否会删除我原有分支上的旧提交,或者对Git历史记录进行任何修改(我想避免这种情况,因为我是在团队中工作)。

也许我应该选择commit-range cherry-pick,而不是git squash?但是cherry-pick只会复制所有的提交,而不是将它们压缩成单个提交。

那么用squash合并是否可行呢?(即使在将feature分支push到远程仓库后)

我希望将我的feature分支作为单个提交(可能包含使用--squash得到的所有提交信息)集成到我的main分支中,但是不要重写历史记录。

1个回答

4
没有历史重写。从高级命令中,只有git rebasegit commit --amend执行历史重写。 git merge --squash仅准备一个工作树,其中包含您要合并的分支的所有信息,正如文档所述:
产生工作树和索引状态,就像发生了真正的合并一样(除了合并信息),但实际上不进行提交或移动HEAD,也不记录$GIT_DIR/MERGE_HEAD以使下一个git commit命令创建一个合并提交。这允许您在当前分支顶部创建一个单独的提交,其效果与合并另一个分支相同(在章鱼情况下可能更多)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接