我有一个本地git仓库,一个远程仓库。 自从上次从远程获取数据后,我对本地回购做了5次提交。混帐,压扁提交
现在我需要推送到远程。我需要压缩最后5次提交。
我可以git rebase -i HEAD~5
做,但它不是很好。我不想在本地回购中更改任何内容。我想推一个压扁的提交到远程,并在我的本地回购中留下5个不变的提交。
任何想法?
UPD: 如果我有5次提交的本地回购,那么该怎么办?我需要创建新的远程回购以与其他人分享我的代码。如何压扁承诺这个新的回购?
我有一个本地git仓库,一个远程仓库。 自从上次从远程获取数据后,我对本地回购做了5次提交。混帐,压扁提交
现在我需要推送到远程。我需要压缩最后5次提交。
我可以git rebase -i HEAD~5
做,但它不是很好。我不想在本地回购中更改任何内容。我想推一个压扁的提交到远程,并在我的本地回购中留下5个不变的提交。
任何想法?
UPD: 如果我有5次提交的本地回购,那么该怎么办?我需要创建新的远程回购以与其他人分享我的代码。如何压扁承诺这个新的回购?
从Titas的answer轻微的变化,而不必使用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仓库),如果你只是想保留你的五个提交参考,也许你应该在他们的分支工作。
git branch new-branch master
做你的提交。既然你已经这样做了,只是重置主的头:
git reset --hard HEAD~5
git merge --squash master new-branch
git push
你将最终被压扁提交关于master
和origin/master
和5次提交的new-branch
。
+1。另见http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-and-rebase/2427520#2427520 – VonC
是的。这是一个很好的选择。但我发布的问题描述了我的情况并不完全:)。我有5个提交,需要推送他们到新(空)远程回购/所以我没有标签,存在于我的本地和我的远程回购...因此,我问到“在飞行中”挤压。 .. –