2017-06-20 59 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

對不起,我想說,這將*不*壓縮所有提交歷史記錄。 –

相關問題