2012-12-02 29 views
5

我有一個本地git倉庫,一個遠程倉庫。 自從上次從遠程獲取數據後,我對本地回購做了5次提交。混帳,壓扁提交

現在我需要推送到遠程。我需要壓縮最後5次提交。

我可以git rebase -i HEAD~5

做,但它不是很好。我不想在本地回購中更改任何內容。我想推一個壓扁的提交到遠程,並在我的本地回購中留下5個不變的提交。

任何想法?

UPD: 如果我有5次提交的本地回購,那麼該怎麼辦?我需要創建新的遠程回購以與其他人分享我的代碼。如何壓扁承諾這個新的回購?

回答

1

Titasanswer輕微的變化,而不必使用master分支,並在一個新的分支擠壓(你會推到新的回購)

git remote add newrepo url://of/your/new/repo 
git checkout -b newbranch master 
git merge --squash master 
git push -u newrepo newbranch:master 

但是,這將推動主的完整歷史記錄,+1(壓扁)提交,在你的新回購。

如果你想要一個分支新的歷史記錄,您的回購爲5個新提交後,更容易:

  • 克隆您的本地回購,
  • 刪除.git在本地克隆,
  • git init.(即重新創建所有現有文件的新本地git倉庫),
  • 添加一切,做一個承諾,
  • 添加遠程(您遠程回購),
  • 並推動你的新本地回購一個提交。
5

如果你只是想保留你的五個提交參考,也許你應該在他們的分支工作。

  1. git branch new-branch master
  2. 做你的提交。既然你已經這樣做了,只是重置主的頭:

    git reset --hard HEAD~5

  3. git merge --squash master new-branch
  4. git push

你將最終被壓扁提交關於masterorigin/master和5次提交的new-branch

+1

+1。另見http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-and-rebase/2427520#2427520 – VonC

+0

是的。這是一個很好的選擇。但我發佈的問題描述了我的情況並不完全:)。我有5個提交,需要推送他們到新(空)遠程回購/所以我沒有標籤,存在於我的本地和我的遠程回購...因此,我問到「在飛行中」擠壓。 .. –