在不同目录级别合并git存储库
我有一个存储库B,其内容需要驻留在a的子目录中。。。在A/src/B中,我希望最终得到一个存储库A,其中包含A和B提交的历史记录 web上的其他解决方案似乎向我展示了如何在单独的子树中保持树的完整性,或者如何合并具有相同目录结构的存储库的选定部分在不同目录级别合并git存储库,git,Git,我有一个存储库B,其内容需要驻留在a的子目录中。。。在A/src/B中,我希望最终得到一个存储库A,其中包含A和B提交的历史记录 web上的其他解决方案似乎向我展示了如何在单独的子树中保持树的完整性,或者如何合并具有相同目录结构的存储库的选定部分 那么,有没有办法做到这一点呢?事实上,这很简单,但命令并不一定显而易见。如果您以后需要合并来自B的更多更新,一个不错的选择是(不要与子树合并策略混淆)。您说您希望得到一个存储库,所以使用git子模块是不合适的 下面是进行此操作的经典方法,并给出一些解释
那么,有没有办法做到这一点呢?事实上,这很简单,但命令并不一定显而易见。如果您以后需要合并来自B的更多更新,一个不错的选择是(不要与子树合并策略混淆)。您说您希望得到一个存储库,所以使用git子模块是不合适的 下面是进行此操作的经典方法,并给出一些解释:
cd A
B
中获取主
分支(或任何分支),并(临时)将其存储为获取头
:
git fetch /home/whoever/dev/B master
FETCH\u HEAD
中所做的更改,但不提交。这样我们以后就可以提交合并,合并的父级将包括FETCH\u HEAD
。(该父项存储在.git/MERGE\u HEAD
中)
FETCH_HEAD
(仍然是B
的master
分支)读入子目录src/B
的暂存区。-u
也意味着在工作副本中反映结果:
git read-tree --prefix=src/B/ -u FETCH_HEAD
git commit -m "Merge in the history of master from B into src/B"
这与中的建议类似,只是我跳过了为
B
创建远程。请注意,这个过程实际上并没有使用子树合并策略——如果我理解正确的话,这只适用于合并B
中的进一步更改。这对我来说更清楚。我很难理解“我们的”是什么意思。。。我还以为fetch会把文件放错目录。。。谢谢。Git版本2.9和更高版本将会。如果出现错误“致命:拒绝合并不相关的历史记录”,请将--allow unrelative histories
标志传递到git merge
git commit -m "Merge in the history of master from B into src/B"