gpt4 book ai didi

Git子树 merge ,但保留本地更改?

转载 作者:太空狗 更新时间:2023-10-29 13:27:41 26 4
gpt4 key购买 nike

我想将第 3 方存储库中的一个分支添加为我的存储库的子目录。我希望能够更改该第 3 方代码,在我的 repo 中维护这些更改,并且仍然能够获得对第 3 方 repo 所做的更新。本质上,我正在尝试创建一个叠加层。

遵循指南 here对于子树 merge (准确描述了我要完成的任务),我创建了一个指向该第 3 方存储库的远程,创建了一个引用我想要的远程分支的本地分支,对该分支进行了 pull ,然后使用 read-tree 将本地分支的内容复制到 master 中的子目录中。

我已将此子目录中的更改(新文件和对现有文件的编辑)提交并推送到 master。上游分支中的各种文件也进行了更改。我已经能够将更改下 pull 到我的分支。但是,当我尝试按如下方式 merge 时,

git merge --squash -s subtree --no-commit <my_branch>

我的本​​地更改被上游更改覆盖。我创建的新文件被删除,我对现有文件所做的更改也丢失。

我是在做错什么还是这是预期的行为?我怎样才能保留我的更改并仍然 merge 来自上游的更改?

最佳答案

我不认为这是理想的行为,但我自己刚刚解决了类似的问题。

在我的例子中,原来的问题是当其他开发人员最初将子树添加到 master 分支时,他一次添加了多个子树。这导致更改了生成的提交的 SHA。

因此,当我尝试 merge 子树时,git 无法找到共同的父节点。 git 的最终结果是假设我的本地树中的所有内容都旨在早于原始 repo 中的代码,并且在 merge 完成后本地更改丢失。

我通过在子树的前缀目录中执行 git log --oneline 并识别本地存储库中的第一个提交来解决这个问题。

然后,

git checkout -b <subtree>_merge <first commit SHA>
git merge --squash -s subtree --no-commit <subtree_remote/ref>
git checkout master
git merge <subtree>_merge

这应该让您得到与从顶部的成功子树 merge 中看到的结果相同的结果。

关于Git子树 merge ,但保留本地更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com