我假设两个分支与master
共享的历史,在这里你 错误是,你没有git checkout -b branch2
,同时还对 branch1
。如果这不是真的,那么你需要去解决这个问题,不同的方式。
因此,考虑与master
既branch1
和branch2
份额历史,你可以 做修复branch2
:
$ git checkout branch2
$ git rebase --onto master branch1 branch2
这将在branch2
推出的提交和变基他们,使他们 从master
派生。换句话说,这个git rebase
将放弃在branch1
中引入的提交 - 但不是在master
中 - 并且仅留下在branch2
中引入的提交 。
对于你的问题的第二部分,不,没有办法告诉Git保留 某些目录,而不是其他人。 Git处理 树的提交和快照,而git branch
只是说“根据此 提交开始新分支”。如果历史,就是要完全断开,那么你可以 创建孤儿分支 - 一个分支,将有没有父 提交承诺:
$ git checkout --orphan NAME
这将创建一个新的分支,预 - 用当前树填充。您可以 然后选择使用git rm -rf <path>
删除不需要的目录。或者 用git rm -rf .
完全删除所有内容。
虽然这样做有一些后果。合并分支机构 彼此断开可能会导致很多冲突,因为Git不会知道如何到达那里的一些数据,以及如何巧妙地合并数据。另一方面,如果在 上,你从不打算将它们合并(例如GitHub上的gh-pages
分支机构 ),那么它们就很适合保留。
虽然我会在这里提出几点建议。首先,如果这些 确实应该是完全独立的历史记录的独立分支,那么您可能希望它们位于单独的存储库中。 -
另外,如果你在一个分支说branch10
--and要创建一个基于master
一个新的分支 ,你可以做到这一点很容易:
$ git checkout -b NAME master
换句话说,你可以选择使用哪个提交或分支作为您的起点 。
最后,由于不清楚为什么你想维护不同目录在不同的 分支机构,我建议你退后一步,并检查你想要完成的任务。在Git中有很多可能的情况,但是选择违背其优点的方法会使工具更加难以使用,并且存储库难以共享。
据我所知git不跟踪目录只是文件?如果删除它的内容,该目录可能会消失。 – Croo
但我不希望该目录远离回购。我希望该目录远离当前分支。就像在不同分支中维护不同的目录 –
也许你正在做一些根本错误的事情。为什么你需要在不同分支中维护不同的目录。那个目录的内容是什么? – robert