我遇到了一个问题,当两个分支长期独立开发时,其中一个文件被移到另一个目录中
假设我们有一个名为src/dir1/Main.cpp
的文件和两个具有公共base
的分支branch1
和branch2
然后它们被移到branch1
中的文件,现在它被称为src/dir2/Main2.cpp
当然,两个分支也修改了该文件独立
现在我想在branch1
之上重新设置branch2
的基础,并将这两个更改都保留在文件src/dir1/Main.cpp
(原始更改(中。
git checkout branch2
git rebase branch1
Git询问我是想使用修改版还是删除版,我选择删除版。然后,我想继续以base:src/dir1/Main.cpp
为基础合并文件branch1:src/dir1/Main.cpp
和<old_branch2_hash>:src/dir2/Main2.cpp
。是否可以使用内置的git命令(可能调用默认的mergetool
(或不使用类似bash的$()
语法?我希望它能在linux和windows系统上运行,而不需要手动复制这些文件并在它们上调用合并工具。
根据git合并文件,尝试
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
来覆盖目标文件。