Git,在飞行中压缩提交

5

我有一个本地的git仓库和一个远程仓库。自从上一次从远程仓库拉取以来,我在本地仓库中进行了5次提交。

现在我需要推送到远程仓库,并且我需要合并我的最后5个提交。

我可以通过git rebase -i HEAD~5来实现。

但这不是最好的方法。我不想改变本地仓库中的任何内容。我希望只将一个合并后的提交推送到远程仓库,并在本地仓库中保留5个未更改的提交。

有什么建议吗?

更新: 如果我有一个包含5个提交的本地仓库,需要创建一个新的远程仓库与他人共享我的代码。如何为这个新的仓库合并提交?

2个回答

5
如果您只是想保留这五个提交作为参考,也许您应该在一个分支上工作。
1. 创建一个新分支并从主分支检出:git branch new-branch master 2. 进行您的提交。完成后,将主分支 head 重置为最近的五次提交:git reset --hard HEAD~5 3. 将新分支合并到主分支,并使用“--squash”参数来压缩提交:git merge --squash master new-branch 4. 推送更改到服务器:git push 现在您会在主分支和远程主分支上看到一个被压缩的提交,而在新分支上保留了五个提交。

1
+1。另请参阅https://dev59.com/VnE95IYBdhLWcg3wKqyq#2427520 - VonC
是的,这是一个不错的选择。但是我发布的问题并没有完全描述我的情况 : )。我有5个提交,需要将它们推送到新的(空的)远程存储库。因此,我没有标签,在我的本地和远程存储库中都不存在...因此,我询问了关于“即时”压缩的问题... - Victor Mezrin

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

但这将在您的新存储库上推送主分支的完整历史记录,包括+1(压缩)提交。

如果您想要一个全新的历史记录,并将您的存储库作为5个新提交之后的状态,那么更容易的方法是:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接