我可以在版本控制中将两个文件合并为一个文件吗



假设我有两个文件,其中包含两个类AB。在某个时刻,类B似乎只在类A内部使用,从代码设计的角度来看,将B放在A内部并声明其为私有是完全合理的。

现在,如果我必须执行这样的任务,我只需将源代码从一个文件复制到另一个文件,然后删除现在为空的文件。缺点是版本控制历史记录并没有完全丢失,但不能再明显地被发现。

例如,对于那些指责B源代码的人来说,看起来我是从头开始创建类的,这个人需要去查看实际的提交,以了解实际发生了什么,然后检查被删除文件的历史记录。相比之下,如果我只是移动文件,版本控制会显示源代码有很多更改,然后被移动,然后有其他更改。

有没有一种方法可以合并两个文件(在SVN或Git中(,从而保留历史?

当然,当我尝试用谷歌搜索时,我会得到很多关于合并分支的结果,我找不到如何让谷歌明白我说的是不同的合并。

让我们假设B在项目中出现的第一个修订版是X:

git rebase -i X~
# change the first revision to say edit (or e) in the text editor, save and exit
# git will go straight to the first revision where X shows up
# open A, copy B code in a way that makes it compile and so on
git add A
git rm B
git rebase --continue
# from now on, this is what you do every time a conflict comes up
git checkout REBASE_HEAD -- . # put everything exactly like it was in the revision we are rebasing
# open A... there should be no B code
# open B
# copy B code into A and make it compile
git add A
git rm B
git rebase --continue

直到它完成。。。在那个时候,你应该有一个完整的历史,B从一开始就在a内部成长。

最新更新