git squash提交公共服务器,但保留私有服务器的详细提交

gar*_*tor 5 git version-control github git-rebase

我正在写一个开源库.我正在使用两个遥控器:一个用于个人测试平台和备份的私人仓库,另一个用于github的公共托管.

在私人仓库中,这是我保存的地方,并做了很多提交和推送所有的小改动,如"固定拼写"或"仍在处理bug#123!".这很好,我想保持这种方式.私人回购将永远不会分享给任何人.

在github上的公共回购中,我希望我的git提交历史是干净的.将多个提交合并为一个提交,例如"修复了错误#123".

问题是,如何在两个不同的远程回购中保留两个单独的git历史记录?

我一直在读文章git rebase.会rebase改变那个分支的整个历史吗?如果我改变公共回购的历史,私人回购也会被重新定价吗?

如果我维持两个分支会更好吗?是否有可能公共服务器只看到一个分支(作为主服务器),而另一个分支机构看到具有详细提交的两个分支?

我不确定这种情况的最佳做法是什么.感谢您的时间.

ДМИ*_*КОВ 4

问题是,如何在两个不同的远程存储库上维护两个单独的 git 历史记录?

我要小心你,那根树枝不应该长寿。长期存在的分支有一天会变得一团糟,因为它应该与开发分支(或你的分支起始的分支)同步,这就是为什么你被鼓励做所有这些等等git rebase develop

实际上,很难理解在不同的遥控器上拥有一个分支的两个版本有什么好处。在您的公共存储库中拥有这个包含单个提交并且始终强制更新的分支有什么意义?对我来说,这听起来像是无用的废话。

现实生活中事情是如何发生的:

  • 您发布您的分支以及您所做的所有提交;

  • 当功能完成并且每个人都同意将此分支合并到一个分支develop(或它的创建位置)时,可以将其压缩为单个提交或可以按原样合并。

  • 您正在使用的远程功能分支应该被删除,因为它已合并到另一个分支,并且不会补充任何提交。

因此,除了您的分支所在的分支之外,根本不需要维护任何内容。

按字面意思回答问题:

如果您想要一个具有单次提交的分支,其中包含您在当前分支中所做的所有更改,您可以执行以下操作:

  • 获取您在当前分支中所做的所有更改。git diff ${SHA},其中${SHA}是您的分支起始的分支的最后一次提交。
  • 将此差异重定向到补丁文件> patch.diff
  • 结帐${SHA}git checkout ${SHA}
  • 使用 打补丁patch -p1 < patch.diff
  • 使用 进行提交git commit -m '...'
  • 使用 重命名分支git branch -m
  • 使用 将其推送到远程git push ${REMOTE_NAME} ${BRANCH_NAME}
  • 在下次使用 推送到公共远程之前重置此提交git reset HEAD~1

但所有这些看起来都是一堆丑陋的拼凑,普通开发人员永远不会使用:[