如何 git 在不添加到孤儿历史的情况下将主分支的更改合并到孤儿分支?

How to git merge changes from main branch to orphan branch without adding to orphan's history?

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

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

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

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


编辑 回复 jlanza:

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

  • master 作为您的 public 分支。将你目前所有的 "public" 工作提交给这个分支。切勿向此分支提交任何 "private" 工作。
  • 在master的基础上新建一个私有分支。我们称之为 privategit checkout -b private。将您不想分享的任何内容 public 提交到此分支。
  • 每当您提交要共享的工作时 public,请将该工作提交给 master。您可以随时将此分支推送到存储库托管的任何位置。 git push origin master:refs/heads/master.
  • 每当您提交不想共享的工作时 public,请将该工作提交给 private。不要将此分支推送到任何 public 存储库。
  • 您可以通过合并或重新定位来使 privatemaster 保持同步。类似于 git checkout private && git merge master.

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

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

Apply the change introduced by the commit at the tip of the master branch and create a new commit(s) with this change.

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


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