Git - 将单个合并提交推送到新的远程仓库

5

我已经在一个私有仓库上工作了一段时间,现在准备将其发布到GitHub上。

问题是我有很多次提交,为了卫生起见,我希望只有一个提交记录出现在GitHub上。

我该如何推送而不推送历史记录?即将整个主分支合并为单个提交。

非常感谢您的帮助。

Doug

2个回答

5
通常情况下,您可以使用 git rebase --interactive HEAD~n 命令,其中 n 是您想要合并为一个提交的提交数量。但是,在您的情况下,您想将整个历史记录压缩为一个提交,并且由于无法在没有父级(直到初始提交)的情况下进行变基,因此我们必须使用 git resetgit commit --amend 命令。
以下是操作步骤:
  1. 运行命令 git log --oneline ,找到您初始提交的 SHA。
  2. 假设我们的 SHA 是 fe7d5d1,则运行 git reset fe7d5d1 命令。这将重置分支到初始提交。
  3. 现在使用 git add . 命令来暂存所有更改。
  4. 接下来修改您的初始提交,运行 git commit --amend -m "Initial commit" 命令。
  5. 使用 git log --oneline 命令确认您现在只有一个提交。
警告:永远不要重写/压缩/变基您已经推送到远程仓库的提交。

1
如果我已经将整个 Git 历史记录推送到 Bitbucket 的私有仓库中,但只想将当前状态(即变基后的状态)推送到 GitHub 上怎么办? - Doug
1
这个想法是永远不要重写已经传播给其他人的历史记录。在你的情况下,如果只有你可以访问私有仓库,那么重新设置基线是安全的。 - Sahil Muthoo
我不能只为GitHub存储库重写历史记录并保留BitBucket的历史记录吗?即将我所有当前的更改作为单个提交“Commit”? - Doug
1
我不建议这样的工作流程。实际上,我认为将所有提交压缩成一个只应该是一次性的活动。你不想一直这样做。把2-3个相关的提交压缩成一个是常见的,但不是整个分支。提交历史很重要,必须始终保持。 - Sahil Muthoo

1

研究 git rebase。交互模式。


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