我如何压缩所有提交历史并推送到另一个远程存储库?

How do I squash all commit history and push into another remote repository?

我试了很多都没弄明白。我有两个本地分支机构,mastertests。我有两个具有相同回购协议的相应远程分支,origin/masterorigin/tests。我有另一个远程分支 public/master。我在本地 master 和远程 origin/master 上都有一些推送的提交历史记录。现在,我想压缩 origin/master 的所有提交并推送到远程分支 public/master。我不知道该怎么做。

我试过 rebase 在一个新的本地分支上,但没有成功。

重置为您的第一次提交,然后修改,最后强制推送。

git pull origin master
git checkout master
git reset --soft <my-first-commit>
git commit --amend -m "New commit message"
git push public master --force-with-lease

如果最后一个命令给出 "stale info" 错误,要么

  • 运行 git fetch public master 在最后一个命令之前,或者
  • 运行 git push --force-with-lease public +master 而不是最后一个命令。

您可以这样找到您的第一个提交:

git rev-list --max-parents=0 HEAD

也可以通过检查孤立分支(它将携带当前工作树进行第一次提交)来工作,然后你可以推送到任何你喜欢的远程。