git,在飞行中压缩提交

Vic*_*rin 5 git rebase squash

我有一个本地git仓库,一个远程仓库.自从上次从远程拉出以来,我向本地回购做了5次提交.

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

我可以做到 git rebase -i HEAD~5

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

有任何想法吗?

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

Tit*_*tas 5

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

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

    git reset --hard HEAD~5

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

您将结束与压扁提交上masterorigin/master和5条上new-branch.


Von*_*onC 1

与Titas答案略有不同,无需触及您的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
Run Code Online (Sandbox Code Playgroud)

但这会将 master 的完整历史记录、+1(压缩)提交推送到您的新存储库上。

如果您想要一个分支新历史记录,并在 5 个新提交之后使用您的存储库,则更容易:

  • 在本地克隆您的存储库,
  • 删除.git该本地克隆中的
  • git init.(即,从所有现有文件重新创建一个新的本地 git 存储库),
  • 添加所有内容并进行一次提交,
  • 添加您的遥控器(到新的远程存储库),
  • 并推送您的新本地存储库的一项提交。