我手中有一种奇怪的情况。说我是一个名为git_test的git repo。它有3个分支:
它有2个文件夹(dir1,dir2)和README文件。
现在,master分支只有README文件。 branch1有dir1。 但是当我创建branch2并签出时,它同时具有dir1和dir2。 (此时我已将分支推到远程仓库)
现在我的问题有两个部分。
如何从branch2中删除dir1? (也就是说,我希望branchN只有dirN,而不是repo中的其他目录)
在创建分支时,有没有办法在将来避免这种情况? (选择我想要包含在该特定分支中的导演(y / ies)?
TIA
答案 0 :(得分:0)
猜测(我不确定您是否向我们提供了足够的信息),如果branch2
基于branch1
,那么它将包含branch1
所做的任何内容。换句话说,您可能遇到这种情况:
master-->branch1-->branch2
如果是这种情况,那么您可以通过branch2
取代master
来实现您想要的目标,即
-->branch1
master-|
-->branch2
在上面列出的情况中,您可以通过签出branch2
然后执行来更改一个:
git rebase --onto master branch1
这会从branch2
开始切断branch1
位(不包括)并将其粘贴在master
之上。
我不确定你为什么要这样做,但它会起作用。如果您稍后更改master
中的常见内容(例如README
),那么您可以简单地在master
上修改所有分支以将更改合并到其中。
答案 1 :(得分:0)
我假设两个分支都与master
共享历史记录,而且你的分支
这里的错误是你在{for} 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
只是简单地说“基于此开始一个新的分支
提交“。如果历史意图完全断开,那么你可以
创建一个 orphan 分支 - 一个没有父级的提交分支
提交:
$ git checkout --orphan NAME
这将创建一个新的分支,预先填充当前树。您可以
然后选择使用git rm -rf <path>
删除不需要的目录。要么
使用git rm -rf .
完全删除所有内容。
虽然这样做有一些后果。合并分支
彼此断开连接会导致许多冲突,因为Git不会
知道如何获得一些数据,以及如何巧妙地合并数据。如果,开
另一方面,你永远不打算合并它们(例如gh-pages
分支
在GitHub上,那么他们就可以随心所欲了。
我会在这里提出更多建议。首先是如果这些 真的应该是完全独立的历史的独立分支, 那么你可能想要它们在不同的存储库中。
另外,如果你在一个分支上 - 比如branch10
- 并且想要创建一个新的分支
基于master
,您可以通过以下方式轻松完成:
$ git checkout -b NAME master
换句话说,您可以选择要用作启动的提交或分支 点。
最后,因为不清楚为什么要维护不同的目录 分支机构,我建议你退后一步,检查你想要的东西 完成。在Git中有很多可能,但选择一种方法 与其优势相悖可能会使该工具更难以使用 存储库更难分享。