git,在飞行中压缩提交

时间:2012-12-02 11:43:42

标签: git rebase squash

我有一个本地git仓库,一个远程仓库。 自从最后一次从遥控器拉出来之后,我向本地回购做了5次提交。

现在我需要推送到远程。我需要压缩我最近的5次提交。

我可以通过git rebase -i HEAD~5

来完成

但这并不好。我不想在我的本地仓库中改变任何东西。我想将一个压缩的提交推送到远程,并在我的本地仓库中保留5个未更改的提交。

有什么想法吗?

UPD: 如果我有5个提交我的本地回购怎么样?我需要创建新的远程仓库以与他人共享我的代码。如何压缩这个新回购的提交?

2 个答案:

答案 0 :(得分:5)

如果您只想保留五个提交以供参考,也许您应该与他们一起工作。

  1. git branch new-branch master
  2. 做你的提交。既然你已经这样做了,只需重置主人头:

    git reset --hard HEAD~5

  3. git merge --squash master new-branch
  4. git push
  5. 您最终会在masterorigin/master以及new-branch上的5次提交中压缩提交。

答案 1 :(得分:1)

来自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仓库),
  • 添加所有内容并执行一次提交,
  • 添加您的遥控器(到您的远程仓库),
  • 并推送一个新的本地回购提交。