Git:在远程存储库上隐藏提交消息

4
在本地使用git时,我通常会频繁提交代码,并使用主题分支。然后将这样的主题分支合并到名为develop的分支中,该分支将被推送到远程仓库。
我总是使用--no-ff合并,因此我的整个主题都有一个提交记录。
现在,我想只推送具有指定描述的提交记录,以便您可以查看服务器上的提交历史记录,并直接了解发生了什么,而无需阅读每个单独的提交记录。
对于我的本地工作,如果我想重置分支或类似操作,我将拥有完整的历史记录。
我不知道是否有一种方法可以在git中实现这一点,但这对我来说非常有用,所以我试着问问你。
3个回答

1

从您所描述的情况来看,您只需要推送您的开发分支,而不是推送您的主题分支。

  • 您的devel分支将包含一个提交(在与主题分支合并时创建),该提交总结了已完成的工作。
    该提交将被推送到远程。
    诀窍在于,它不应链接到您的主题分支(或其历史记录也已发布)。
    使用git merge --squash有助于生成单个提交。
  • 您的topic分支保持未发布状态(未推送),并包含所有详细历史记录。
    例如,您可以通过在远程端上设置钩子来强制执行此操作,以拒绝任何您不想要推送到您的(远程)存储库的分支。

如评论中Daniel Yankowsky提到的,git merge --squash确实可以使用,但是会丢失变更历史记录。因此,你可以设置两个“devel”分支。
      t--t--t--t (topic)
     /
 x--x (devel)
 \
  p--p (devel_pub)
  • 一个用于合并的分支(经典的 'devel' 分支)
  • 一个用于发布的分支('devel_pub'),在这里您执行 merge --squash 操作
                  (主题)
                    |
     x--x--t--t--t--t--d (devel)
     \
      p--p--T(devel_pub,其中 T 为 "git merge --squash topic")

所有的父提交不都被推送了吗?因此,推送合并提交也会推送合并的两个分支吧? - Daniel Yankowsky
@Daniel:说得好。我已经修改了我的答案,避免将开发历史与主题分支合并联系起来。 - VonC
@Sebastien:没错,这就是为什么我建议(在我的答案的新版本中)使用“git merge --squashed”。 - VonC
@Daniel:没错,rebase --squashed 更适合处于生命周期末尾的专题分支。但是可能的解决方案是 两个 'devel' 分支:一个进行合并(传统方式),但不推送(因为它有完整历史记录),而 'devel_published' 分支则用于执行“merge --squashed”。 - VonC
@VonC:选项是 --squash,而不是 --squashed - Cascabel
显示剩余2条评论

1

我不知道有什么方法可以做到你所描述的事情,而且我怀疑这是违背git设计的。听起来你想要总结一整个提交集。如果你使用--no-commit选项合并,并编辑合并提交消息以总结你的分支更改,会怎样呢?


0

看起来你可能想在推送之前使用 git rebase 重写你的本地历史记录。

反正为什么不想要它在远程端呢?似乎并不会有太大影响。只需将远程端设置为仅显示一个包含你的合并提交的分支即可。


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