git - 如何更改 Git 子树 merge 的来源

标签 git subtree

我有一个项目,我使用 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/

相关文章:

c - BST C语言如何删除子树?

python - 有没有比标准 "recursive"更快的方法从 python 中的树状结构获取子树?

python - DockerFile 与 python requests.txt 中的私有(private) github 存储库

git - 为什么 Git 不识别我的 .gitignore 排除项?

Git 在将更新 merge 到我的子树时感到困惑

c++ - Boost 1.46.1,属性树 : How to iterate through ptree receiving sub ptrees?

wordpress - AWS 代码部署 : How to stop it from deleting files?

java - 上传android项目到GitHub

git - LibGit2Sharp : Checkout Remote Branch

algorithm - 高效遍历单向树