我遇到了一个问题,当两个分支独立开发了很长一段时间,其中一个文件被移动到另一个目录中
假设我们有一个名为src/dir1/Main.cpp的文件,以及两个具有公共base的分支branch1和branch2
然后他们将文件移动到branch1中,现在文件名为src/dir2/Main2.cpp
当然,这两个分支也独立地修改了该文件
现在,我想在branch1上重新设置branch2的基址,并将这两个更改保留在文件src/dir1/Main.cpp (原始文件)中。
git checkout branch2
git rebase branch1Git询问我是要使用修改版本还是删除版本,我选择了删除版本。然后,我想在base:src/dir1/Main.cpp的基础上进行文件branch1:src/dir1/Main.cpp和<old_branch2_hash>:src/dir2/Main2.cpp的合并。有没有可能使用内置的git命令(可能调用默认的mergetool),或者不使用类似$()的语法?我希望它在linux和windows系统上都能工作,而不需要手动复制这些文件并调用合并工具。
发布于 2021-05-18 21:39:25
根据git merge-file的说法,尝试
git cat-file -p branch1:src/dir1/Main.cpp > current.cpp
git cat-file -p old_branch2_hash:src/dir2/Main2.cpp > other.cpp
git cat-file -p base:src/dir1/Main.cpp > base.cpp
git merge-file current.cpp base.cpp other.cpp合并结果将写入current.cpp。可能会有冲突。在解决了冲突之后,您可以复制current.cpp来覆盖目标文件。
https://stackoverflow.com/questions/67586635
复制相似问题