Git 如何将更改从主分支合并到孤立分支而不添加到孤立分支';什么是历史?

Git 如何将更改从主分支合并到孤立分支而不添加到孤立分支';什么是历史?,git,git-merge,git-checkout,Git,Git Merge,Git Checkout,我的博士论文(latex)有一个git存储库。大学政策不允许我与我的研究顾问分享我论文的背景回顾章节,我可以自由分享和获取其他章节的意见 为了与我的顾问共享存储库,我创建了一个孤立分支(noRevBranch),删除了所需的章节,并将该分支推送到github上的一个新存储库,并对其进行跟踪。 我可以与他分享这一点,他无法访问删除的章节,因为这里没有历史 问题是如何将将来对主分支所做的任何更改合并到noRevBranch,而不将主分支历史附加到新的合并提交中?我认为您是在倒退。您需要将noRevB

我的博士论文(latex)有一个git存储库。大学政策不允许我与我的研究顾问分享我论文的背景回顾章节,我可以自由分享和获取其他章节的意见

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


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

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


编辑以响应jlanza:

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

  • master
    设置为您的公共分支机构。将您迄今为止的所有“公开”工作提交给本部门。切勿将任何“私人”工作提交给本部门
  • 基于master创建一个新的私有分支。我们称之为私人的
    git签出-b private
    。将您不想公开共享的任何内容提交到此分支
  • 无论何时提交要公开共享的工作,都要将该工作提交给
    master
    。您可以随时将此分支推送到回购托管的任何位置<代码>git推送原点主控形状:refs/heads/master
  • 每当您提交不想公开共享的工作时,请将该工作提交到
    private
    。不要将此分支推送到任何公共存储库
  • 您可以通过合并或重新建立基础,使
    private
    master
    保持最新。类似于
    git checkout private&&git merge master

您可以将结构保留为当前结构。
您可以使用
git cherry pick
将所有新提交提交到“孤立”分支

git cherry pick…
应用主分支顶端的提交引入的更改,并使用此更改创建新的提交

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



读出全文

谢谢mkasberg。我意识到这一点,如果我现在就开始的话,我会这么做的。我在存储库中有三年的历史(我是一个git noob)。我不想现在就重组它,冒着失去一些东西的风险。如果没有优雅的方法,我可以随时创建一个新的回购协议并在那里复制文件,只要我需要我的顾问的输入并提交它们,我只是想在我当前的工作流程中无缝集成一些东西。你可能不需要做很多重组。您可能只需要开始在noRevBranch上进行提交并重新设置revBranch的基址。Git的一个优点是,只需复制文件夹,就可以轻松地复制整个存储库。我建议您复制一份存储库,并尝试向noRevBranch提交,然后重新设置revBranch的基础。看看你对结果是否满意。或者如果你对此不满意,我会继续将noRevBranch从revBranch重新定基。但不要分享整个分支。只需将文件复制到Dropbox或其他地方。@mkasberg您没有将章节包含在.gitignore中,以便在合并时不合并它吗?我不想在公共分支上共享一些代码,但我也遇到了类似的问题,我发现樱桃选择/补丁更容易。你能详细说明一下你建议的工作方法吗?@jlanza我编辑了我的帖子,以包含我将使用的工作流程的更多细节。您不需要以任何方式更改
.gitignore
,因为您的所有工作(公共或私人)都提交给一个分支或另一个分支。只是要知道你在做什么,以及它要去哪里。