如何从远程存储库合并/拉取

时间:2011-03-20 16:32:12

标签: git merge subtree

我正在尝试将一些子目录从远程git存储库合并到我的存储库。远程和本地存储库都包含整个内核存储库,我只对无线相关文件感兴趣。 我尝试按照"How to use the subtree merge strategy"下的说明进行操作,但由于大多数文件都存在于本地存储库和远程存储库中 git read-tree --prefix=dir-B/ -u Bproject/master命令失败。我无法在同一命令行中使用-m选项和--prefix

此合并实际上应该根据远程存储库中的文件更新(合并/拉取)所有相关的无线目录/文件,其中应该通过优先选择远程文件来解决冲突。

要使我的问题一般 - 说你有资源库A和B.两者都有文件夹wireless_dir:A / wireless_dir,B / wireless_dir。我正在使用存储库B,并希望从A / wireless_dir更新B / wireless_dir中的所有文件,其中发生合并冲突时首选A / wireless_dir中的更改。

2 个答案:

答案 0 :(得分:1)

从Jeformi评论的内容来看,您似乎已经知道该文件夹是一个单独的存储库,如果是这种情况,您需要做的就是git pull

但是,如果你要查找的提交包含你不想要的其他文件夹中的文件,Git允许你在这里提到的“unsqaush”提交方式:redhatmagazine

执行此操作的步骤(对您的情况更为笼统)是:

1)记下HEAD当前所处的提交,让我们称之为<OLD_HEAD>以获得乐趣。这可以从日志中获取并使用以下方法查看最新提交的sha1:

git log

2)将回购A中的更改拉入您的分支(这将包括您可能不需要的任何内容):

git pull <repo A> <branch_name>

3)现在是时候使用<OLD_HEAD>(以非粗俗的方式)......这是通过重置来完成的

git reset --mixed <OLD_HEAD>

4)有了你所做的一切,你的HEAD回到了<OLD_HEAD>并且您的索引也是如此,但是在您的工作目录中,您现在可以获得您一直在寻找的回购A的更改,以及wireless_dir文件夹之外的文件的可能性。以交互方式将工作目录中的这些文件合并到索引使用中(如果您想要的话,只能在wireless_dir文件中):

git add --patch <filename>

5)最后:

git commit -m “Selectively merged my files”

注意:如果你不想搞砸你的分支,请在尝试上面之前建立一个新的分支。

答案 1 :(得分:0)

最简单的方法是合并整个分支,将该文件夹复制到git树之外,撤消或中止合并,然后将文件夹复制回来。

但是,如果任何更改在该文件夹之外具有依赖关系,那么您将遇到问题。您可能希望cherry-pick触及该文件夹(来自git log subdir)的任何内容的整个提交以引入依赖项。