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

时间:2013-01-27 07:57:05

标签: git version-control github git-rebase

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

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

在github上的公共仓库中,我希望我的git提交历史记录清晰。将多个提交合并为一个提交,例如“修正了错误#123”。

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

我一直在阅读有关git rebase的文章。 rebase会改变该分支的整个历史记录吗?如果我改变公共回购的历史,那么私人回购也会被重新定位吗?

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

我不确定这种情况的最佳做法是什么。谢谢你的时间。

1 个答案:

答案 0 :(得分: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推送到公共远程之前重置此提交。

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