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

时间:2016-04-17 14:32:52

标签: git git-merge git-checkout

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

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

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

2 个答案:

答案 0 :(得分:3)

您现在可以将结构保留为正确的结构 你可以做的是使用git cherry-pick <range of commits>将所有新提交提交给“孤儿”分支。

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

  

在master分支的顶端应用commit提交的更改,并使用此更改创建一个新的提交。

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

enter image description here

宣读完整的git cherry-pick documentation for all the options you can use

答案 1 :(得分:1)

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

编辑以回应jlanza:

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

  • master成为您的公共分支机构。到目前为止,将所有“公共”工作提交给该分支机构。永远不要将任何“私人”工作提交给这个分支。
  • 根据主人建立一个新的私人分支。我们称之为privategit checkout -b private。将您不想公开分享的任何内容提交给此分支。
  • 每当您提交要公开分享的作品时,请将该作品提交至master。您可以随时将此分支推送到您的仓库托管的任何位置。 git push origin master:refs/heads/master
  • 每当您提交不想公开分享的作品时,请将该作品提交至private。不要将此分支推送到任何公共存储库。
  • 您可以通过合并或重新定位private使mastergit checkout private && git merge master保持同步。像{{1}}。
  • 之类的东西