我假设这两个分支都与 共享历史master
,并且您在这里的错误是您git checkout -b branch2
仍然在
branch1
. 如果这不是真的,那么您需要以不同的方式解决这个问题。
因此,鉴于两者branch1
并与branch2
共享历史master
,您可以通过以下方式修复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 不会知道某些数据是如何到达那里的,以及如何巧妙地合并数据。另一方面,如果您从不打算合并它们(例如gh-pages
GitHub 上的分支),那么保留它们就很好。
不过,我会在这里提出更多建议。首先,如果这些确实应该是具有完全独立历史的独立分支,那么您可能希望它们位于不同的存储库中。
此外,如果你在一个分支上——比如说branch10
——并且想要创建一个基于 的新分支master
,你可以很容易地做到这一点:
$ git checkout -b NAME master
换句话说,您可以选择使用哪个提交或分支作为您的起点。
最后,由于不清楚为什么要在不同的分支中维护目录,我建议您退后一步,检查您要完成的工作。Git 有很多可能,但选择与其优势相悖的方法会使工具更难使用,并且存储库更难共享。