关于git:如何压缩已被推送到远程的特定提交?


How to squash specific commits that have been pushed to remote?

我在我的分支中做出了以下承诺并将它们推到远程

1
2
3
4
5
commit 5
commit 4
commit 3
commit 2
commit 1

现在,我要压缩提交1、2和3,并删除提交4和5(不再需要更改)我该怎么做?

  • 交互式钢筋网。您将需要强制推送,如果您与其他人共享您的分支,这可能不是您想要的,因为如果他们有旧提交的副本,那么它将导致同步问题。
  • 是的,我正在和其他人分享这个。还有其他选择吗?
  • 如果您不打算强制推送,那么您就不能真正地压扁提交,尽管您仍然可以恢复您不想要的任何更改。您与多少其他人共享您的分支?
  • 您可能应该接受提交1、2和3没有被压扁,并使用git revert表示4和5。


一旦被推送,您就无法在不影响其他用户的情况下轻松更改历史记录,因此它成为一个通信问题。

一种方法是:

  • 将您的提交压缩并放到单独的分支中
  • 把那个分支推给别人检查
  • 当所有人都同意新的历史记录时,重命名分支(本地和远程)
    • "Git:远程重命名分支?"
    • "git:为本地和远程存储库重命名"master分支"
  • 要求每个人重新设置——硬把他们的branch设置为新的origin/branch