我有一个项目,我使用 Git 子树将其 merge 到一个库中。我在库和项目之间进行了一些小改动。
后来,创建了一个新的存储库,它是图书馆的最终归宿。它包含与我的项目基本上相同版本的库代码,可能只有一两个小的变化。由于各种原因,它不与库的前一个主页共享任何直接的 Git 历史记录(它不是前一个库的克隆)。
我现在想做的是更改我的项目,以便它从新位置 pull/推库。第一次发生这种情况时,我还需要解决任何 merge 冲突,尽管在这种情况下更改是微不足道的,它们可以稍后重做。
执行此操作的最佳方法是什么?
我尝试删除项目中库的副本,然后将其与旧的 Remote 和分支一起删除。然后我尝试从新位置添加子树等。这似乎可行,但是当我尝试从我的项目推回库时,我遇到了致命的错误对象错误。
我认为我尝试过的方法存在缺陷 - 可能与缺乏共享历史有关 - 但我对正在发生的事情没有足够深入的了解,不知道如何修复它,或者解决这个问题的“正确”方法应该是什么。
[更新:编辑问题以使其更清晰 - 它有点模棱两可]
最佳答案
尝试克隆新项目。然后将您的添加为 Remote 并执行
git remote update
这将从您的项目中提取所有引用。现在做
git cherry-pick <sha1>
在新项目中你想要的 sha。这是我认为最简单的方法。
此外,您应该知道 git 不需要公共(public)历史记录(尽管第一次 merge 不太好)。所以你可以按照我说的去做,然后你可以 merge 你的历史而不是 cherry-pick 。它可能会有冲突。我建议一旦你开始 merge (如果你这样做)使用 git mergetool
并知道如何使用三向差异。
关于git - 如何更改 Git 子树 merge 的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3202814/