乐闻世界logo
搜索文章和话题

How to squash commits in git after they have been pushed?

4 个月前提问
2 个月前修改
浏览次数25

1个答案

1

在 Git 中,压缩提交通常是通过使用 rebase 命令实现的,特别是在提交已被 push 到远程仓库后,操作需要更加小心,以避免影响其他协作者的工作。下面,我将分步骤说明如何安全地在 push 之后压缩提交。

第一步:确保你的本地仓库是最新的

在开始压缩提交前,确保你的本地仓库与远程仓库同步。这可以通过 git fetchgit pull 来完成。

bash
git fetch origin git pull origin main

请替换 main 为你的目标分支名称。

第二步:使用 git rebase 进行交互式压缩

使用 git rebase 的交互式模式,你可以选择哪些提交需要被压缩。这里以压缩最近的四个提交为例:

bash
git rebase -i HEAD~4

这将打开一个编辑器,列出了最近的四个提交,并提供了多种选项,如 pick, reword, edit, squash, fixup 等。要压缩提交,你可以将 pick 改为 squashfixup

  • squash:压缩提交并请求合并提交信息。
  • fixup:压缩提交并丢弃该提交的日志信息。

例如:

shell
pick e3a1b35 Initial commit pick 7ac9a67 Added new feature squash 1d2a3f4 Improved feature squash 76b9e7f Fixed bug in feature

保存并关闭编辑器后,Git 将开始压缩过程,如果有 squash,它会要求你编辑新的提交信息。

第三步:强制推送更改到远程仓库

压缩提交后,本地历史与远程仓库的历史不再匹配,你需要使用 git push --forcegit push --force-with-lease 来更新远程仓库。--force-with-lease 是更安全的选项,因为它在推送时会检查远程分支是否有新的提交。

bash
git push --force-with-lease origin main

注意事项

  • 通信:在压缩已经被推送的提交并强制推送到远程仓库之前,确保与团队成员沟通,告知他们你的操作,因为这可能会影响他们的工作。
  • 备份:在进行这样的操作前,最好对你的分支做一个备份,以防万一出错需要恢复。
  • 使用场合:通常只建议在个人项目或者确保所有协作者都了解并同意进行历史更改的情况下,进行提交的压缩和强制推送。

通过这些步骤,你可以有效地压缩 Git 中的提交,并确保团队工作的连续性和一致性。

2024年6月29日 12:07 回复

你的答案