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

3

经过多次尝试,我仍未能弄清楚。我有两个本地分支:mastertests。我有两个相应的远程分支在同一个仓库中:origin/masterorigin/tests。我还有另一个远程分支public/master。我在本地的master和远程的origin/master上都有一些推送的提交历史记录。现在,我想将origin/master的所有提交压缩为一个,并推送到远程分支public/master。然而,我不知道该如何操作。

我已经尝试在一个新的本地分支上进行rebase,但没有成功。


"didnt'w work" 的意思是什么? - sensorario
2个回答

7

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

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

最后一个命令(git push public master --force-with-lease)出现了错误。 ! [rejected] master -> master (stale info) public/master中也有一些内容。但这不应该有影响。 - soham
1
好的,它起作用了。但在推送之前,我需要执行 git pull public master 命令。所以,请添加该命令,我会接受这个答案。非常感谢! - soham
1
@soham.m17 当然可以。不过我使用了 fetch 而不是 pull,因为我们只需要与远程通信以更新陈旧的信息,而不必实际拉取。我还提供了另一种可能有效的选项。 - Shaun Luttin
1
好的,为了其他人和未来的参考,这是我使用的命令:git pull public master --allow-unrelated-histories - soham

1
你可以通过检出一个孤立的分支(它将携带当前的工作树以进行第一次提交),然后将其推送到任何你想要的远程仓库。

但这将压缩我在另一个远程分支中所做的所有提交历史记录。 - soham
这是一个问题还是一条评论?如果这是一个问题:如果您想将新分支的内容替换为远程分支,请使用push --force命令。如果这是一条评论:除非您将代码推送到远程分支,否则它不会被修改。 - eftshift0
抱歉,我的意思是,那不会压缩所有的提交历史记录。 - soham
你的意思是什么?如果你执行“孤儿”checkout命令,该分支将在其历史记录中没有任何提交。因此,如果你提交代码,将会获得该分支上的“第一个”提交(就像一次压缩操作...但不包括注释)。 - eftshift0
好的,我尝试过了,但它会获取我在不同分支上的所有提交历史记录。也许是我犯了一些错误。但我不确定。上面的命令运行得非常好。 - soham

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