我的博士论文(在乳胶中)有一个git存储库。大学政策不允许我与我的研究顾问分享我的论文的背景评论章节,我可以自由地分享并获得其他章节的意见。
为了与我的顾问共享存储库,我创建了一个孤立分支(noRevBranch),删除了所需的章节,并将此分支推送并跟踪到github上的新存储库。 我可以与他分享这个,他无法访问删除的章节,因为这里没有历史记录。
问题是如何将我对master分支进行的任何更改合并到noRevBranch而不将主分支历史记录附加到新的合并提交中?
答案 0 :(得分:3)
您现在可以将结构保留为正确的结构
你可以做的是使用git cherry-pick <range of commits>
将所有新提交提交给“孤儿”分支。
git cherry-pick <SHA-1>...<SHA-1>
在master分支的顶端应用commit提交的更改,并使用此更改创建一个新的提交。
...
的语法是提交范围。从开始(排除)到最后一个提取所有提交。
宣读完整的git cherry-pick
documentation for all the options you can use
答案 1 :(得分:1)
我认为你是倒退了。您需要将noRevBranch视为master并在该分支上执行所有提交。如果不将带有背景章节(revBranch)的分支推送到Github,则可以在需要时对其进行rebase。此分支的历史将永远不会与您的顾问共享,因为它是仅存储在您的计算机上的本地分支,并且由于它从未合并到noRevBranch,因此您的顾问也无法访问其历史记录。但关键是你在noRevBranch上做你的提交(不影响背景章节),因为这将允许你通过重新定位轻松地将它们拉入revBranch。
编辑以回应jlanza:
如果我是从头开始,我会这样做:
master
成为您的公共分支机构。到目前为止,将所有“公共”工作提交给该分支机构。永远不要将任何“私人”工作提交给这个分支。private
。 git checkout -b private
。将您不想公开分享的任何内容提交给此分支。master
。您可以随时将此分支推送到您的仓库托管的任何位置。 git push origin master:refs/heads/master
。private
。不要将此分支推送到任何公共存储库。private
使master
与git checkout private && git merge master
保持同步。像{{1}}。