【问题标题】:Git: hide commit messages on remote repoGit:隐藏远程仓库上的提交消息
【发布时间】:2011-03-01 19:12:59
【问题描述】:

在我的本地机器上使用 git 时,我通常会提交很多内容。为此,我使用主题分支。然后我将这样一个主题分支合并到一个名为develop的分支中,该分支将被推送到远程仓库。

我总是与 --no-ff 合并,因此它们始终是我整个主题的提交。

现在我只想推送这个提交并指定我在这个分支中所做的整体描述。

我更喜欢这样,因为您可以查看服务器上的提交历史并直接查看发生了什么,而无需阅读每个提交。

对于我的本地工作,如果我想重置我的分支或类似的东西,我将拥有完整的历史记录。

我不知道他们是否可以在 git 中执行此操作,但这对我来说非常有用,所以我试一试问你。

【问题讨论】:

    标签: git


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      根据您的描述,您似乎只需要推送您的开发分支,而不是推送您的主题分支。

      • 您的devel 分支将包含一个提交(在与主题分支合并时创建),它总结了已完成的工作。
        该提交将被推送到远程。
        诀窍是,它不应该链接到您的主题分支(或者它的历史也已发布)。
        git merge --squash 将有助于生成单个提交。
      • 您的 topic 分支保持未发布(未推送)并包含所有详细历史记录。
        您可以强制执行此操作,例如,通过hook on the remote side 拒绝任何您不希望被推送到您的(远程)仓库的分支。

      正如Daniel Yankowsky 在评论中提到的那样,git merge --squash 有效,但“丢失了更改血统”。
      这就是您可以设置 2 个“开发”分支的原因。

            t--t--t--t (topic)
           /
       x--x (devel)
       \
        p--p (devel_pub)
      
      • 一个用于合并目的(经典的“devel”分支)
      • 一个用于发布目的 ('devel_pub'),您可以在其中执行 merge --squash)
      (话题) | x--x--t--t--t--t--d (开发) \ p--p--T (devel_pub, T 是 "git merge --squash topic")

      【讨论】:

      • 不是所有的父提交也被推送了吗?因此,推送合并提交也会同时推送合并的双方?
      • 但是使用时: $ git checkout develop $ git merge --no-ff topic develop 有我在主题中的完整历史记录。
      • @Daniel:好点。我已经修改了我的答案,以避免将开发历史与正在合并的主题分支联系起来。
      • @Sebastien:是的,这就是为什么我建议(在我的答案的新版本中)'git merge --squashed'。
      • 这似乎可以处理他的情况,尽管我认为继续使用已被 --squashed 到另一个分支的分支会很困难。如果我没记错的话,您已经完全丢失了更改沿袭,因此以后的合并不会意识到提交已经部分合并。
      【解决方案3】:

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

      你为什么不希望它在远程端呢?这似乎并不重要。只需将远程端设置为仅显示一个具有您的合并提交的分支。

      【讨论】:

        猜你喜欢
        • 2020-06-12
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 2013-09-22
        • 2016-11-12
        相关资源
        最近更新 更多