gpt4 book ai didi

git squash 为公共(public)服务器提交,但为私有(private)服务器保留详细的提交

转载 作者:太空狗 更新时间:2023-10-29 13:23:31 25 4
gpt4 key购买 nike

我正在编写一个开源库。我正在使用两个 Remote :一个用于个人测试平台和备份的私有(private)存储库,另一个在 github 上托管的公共(public)存储库。

在私有(private)仓库中,我在这里保存并进行了大量提交和推送,并进行了所有小的更改,例如“修复拼写”或“仍在处理错误 #123!”。这很好,我想保持这种状态。私有(private)仓库永远不会与任何人共享。

在 github 上的公共(public)仓库中,我希望我的 git 提交历史是干净的。将多个提交 merge 为一个提交,例如“修复错误 #123”。

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

我一直在阅读有关 git rebase 的文章。 rebase 会改变那个分支的整个历史吗?如果我为公共(public) repo 更改历史记录,私有(private) repo 是否也会更改?

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

我不确定针对这种情况的最佳做法是什么。感谢您的宝贵时间。

最佳答案

The question is, how do I maintain two separate git history on two different remote repos?

我想提防你,那个分支不应该长寿。长期存在的分支有一天会变得一团糟,因为它应该与开发分支(或分支开始的分支)同步,这就是为什么鼓励您这样做的原因 git rebase develop等等。

实际上,很难理解在不同远程拥有一个分支的两个版本有什么好处。在你的公共(public)仓库中有这个分支有什么意义,它将包含单个提交并且总是被强制更新?对我来说,这听起来像是无用的废话。

现实生活中的事情是怎样发生的:

  • 您发布包含您已完成的所有提交的分支;

  • 当功能完成并且每个人都同意将此分支 merge 到 develop 中时(或创建它的地方)分支可以压缩成单个提交或可以按原样 merge 。

  • 您之前工作的远程功能分支应该被删除,因为它已 merge 到另一个分支,并且不会补充任何提交。

所以,除了你的分支是从哪个分支开始的,根本没有什么需要维护的。

按文字回答问题:

如果你想要一个单次提交的分支,其中包含你在当前分支中所做的所有更改,你可以这样做:

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

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

关于git squash 为公共(public)服务器提交,但为私有(private)服务器保留详细的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14545527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com