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

Does 'git squash' (after pushing) rewrite the history?

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

现在我想在我的 main 分支中使用此功能,但只是将所有提交压缩为一个提交(在提交消息中重述)。

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

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

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

或者与 squash 合并可以吗? (即使在推送到远程功能分支之后)

我想将我的 feature 分支集成为一个提交(可能包含我通过 --squash 获得的所有提交消息)到我的 main 分支,但不重写历史。

没有历史被改写。在高级命令中,只有 git rebasegit commit --amend 执行历史重写。

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

Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make a commit or move the HEAD, nor record $GIT_DIR/MERGE_HEAD to cause the next git commit command to create a merge commit. This allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus).