2012-12-02 91 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个提交,需要推送他们到新(空)远程回购/所以我没有标签,存在于我的本地和我的远程回购...因此,我问到“在飞行中”挤压。 .. –