4

我正在尝试将一些子目录从远程 git 存储库合并到我的存储库。远程和本地存储库都包括整个内核存储库,我只对无线相关文件感兴趣。我尝试按照“如何使用子树合并策略”下的说明进行操作,但由于大多数文件都存在于本地存储库和远程存储库中,因此 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 中的更改。

4

2 回答 2

1

根据 Jeformi 的评论,您似乎已经遇到了该文件夹是一个单独的存储库的情况,如果是这种情况,您所要做的就是一个git pull.

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

执行此操作的步骤(根据您的情况更概括一点)是:

1) 记下您的 HEAD 当前所在的提交,我们称之为<OLD_HEAD>好玩。这可以从日志中获得,并使用以下命令查看最近提交的 sha1:

git log

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

git pull <repo A> <branch_name>

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

git reset --mixed <OLD_HEAD>

4) 随着你所做的一切,你的 HEAD 又回来了<OLD_HEAD>,你的索引也是如此,但是在你的工作目录中,你现在有了你一直在寻找的 repo A 的更改,以及文件的潜力在 wireless_dir 文件夹之外。要将工作目录中的这些文件以交互方式合并到索引中,请使用(仅在 wireless_dir 中的文件上,如果您想要的话):

git add --patch <filename>

5)最后:

git commit -m “Selectively merged my files”

注意:如果您不想搞砸您的分支,请在尝试上述操作之前创建一个新分支。

于 2011-04-05T22:56:47.407 回答
0

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

但是,如果任何更改在该文件夹之外具有依赖关系,您就会遇到问题。您可能希望对cherry-pick涉及该文件夹(从git log subdir)的任何内容的全部提交来拉入依赖项。

于 2011-04-06T00:00:34.653 回答