2017-06-20 60 views
3

经过多次尝试后,我一直无法弄清楚。我有两个本地分支,mastertests。我有两个对应的远程分支具有相同的回购,origin/master,origin/tests。我有另一个远程分支public/master。我有一些推送在本地master和远程origin/master提交历史记录。现在,我想压扁origin/master的所有提交并将其推送到远程分支public/master。我无法弄清楚如何去做。如何压缩所有提交历史记录并将其推入另一个远程存储库?

我试过在新的本地分支上做rebase但它没有工作。

+0

请参阅:https://stackoverflow.com/documentation/git/5150/tortoisegit/31772/squash-commits – Julian

+0

doeas“didnt'w work”是什么意思? – sensorario

回答

3

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

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 

如果最后一个命令给出一个“过时信息”的错误,无论是

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

你可以找到你的第一个承诺是这样的:

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

最后一个命令('git push public master --force-with-lease')给出错误。 '! [被拒绝]主人 - >主人(陈旧信息)' 公共/主人也有一些内容。但那不应该。 –

+0

@ soham.m17错误是什么? –

+1

好的。有效。但在推动之前,我需要做'推动公共主人'。所以,请添加该命令,我会接受答案。非常感谢! –

1

还可以通过检查出一个孤儿分支(这将携带当前工作树做出的第一个承诺)工作,然后你可以推进到任何你感觉不到的地方。

+0

但是,这将压缩我在其他远程分支中做出的所有提交历史记录。 –

+0

这是个问题还是评论?如果这是一个问题:如果你想把你的新分支的内容替换成远程分支,只需使用''push --force'''。如果是评论:直到你推入某个东西,才会触摸你的远程分支。 – eftshift0

+0

对不起,我想说,这将*不*压缩所有提交历史记录。 –

相关问题