代码之家  ›  专栏  ›  技术社区  ›  UditG

如何git合并从主分支到孤儿分支的更改而不添加孤儿的历史记录?

  •  3
  • UditG  · 技术社区  · 9 年前

    我有一个git存储库用于我的博士论文(乳胶)。大学政策不允许我与我的研究顾问分享我论文的背景审查章节,我可以自由地分享并获得其他章节的意见。

    为了与我的顾问共享存储库,我创建了一个孤儿分支(noRevBranch),删除了所需的章节,并将该分支推送到github上的一个新存储库。 我可以与他分享这一点,但他无法访问删除的章节,因为这里没有历史。

    问题是,我如何将将来对master分支所做的任何更改合并到noRevBranch,而不将master分支历史记录附加到新的合并提交中?

    2 回复  |  直到 9 年前
        1
  •  5
  •   Community CDub    5 年前

    您可以立即保留结构。
    你能做的就是使用 git cherry-pick <range of commits> 将所有新提交提交到“孤儿”分支。

    git cherry-pick <SHA-1>...<SHA-1>

    在主分支的顶部应用提交引入的更改,并使用此更改创建一个新的提交。

    的语法 ... 是提交范围。获取从开始(排除)到最后一个的所有提交。

    enter image description here


    读出全文 git cherry-pick documentation for all the options you can use

        2
  •  1
  •   mkasberg    8 年前

    我觉得你在倒退。您需要将noRevBranch视为master,并在该分支上执行所有提交。如果不将带有背景章节(revBranch)的分支推送到Github,您可以在需要的时候对其进行重新设置。该分支的历史记录将永远不会与您的顾问共享,因为它是本地分支,仅存储在您的计算机上,并且由于它从未合并到noRevBranch中,您的顾问也无法访问其历史记录。但关键是,您正在noRevBranch上进行提交(这不会影响背景章节),因为这将允许您通过重设基来轻松地将它们拉入revBranch。


    编辑 响应jlanza:

    如果我从头开始,我会这样做:

    • 制作 master 你的公共部门。把你所有的“公共”工作都交给这个部门。永远不要把任何“私人”工作交给这个部门。
    • 基于master创建新的私有分支。我们就叫它 private . git checkout -b private 。将您不想公开共享的内容提交给此分支。
    • 每当你提交想要公开分享的工作时,请将该工作提交给 主人 。您可以随时将此分支推送到存储库所在的位置。 git push origin master:refs/heads/master .
    • 每当你提交了你不想公开分享的工作,就把它提交给 私有的 。不要将此分支推送到任何公共存储库。
    • 你可以保留 私有的 最新的 主人 通过合并或重新定位。类似于 git checkout private && git merge master .