Git - 追溯修补将要复制的文件

时间:2012-02-08 19:32:32

标签: git copy patch

假设我有一个包含original.script的git repos。在某些时候,我想做类似于original.script的事情,所以我决定将它作为新脚本modified.script的起点:

% git branch before-cp
% cp original.script modified.script
% git add modified.script
% git commit -m "creating a copy to modify"
% vim modified.script #...
% git add modified.script
% git commit -m "made some modifications"

现在,在某些时候,我发现了original.script中的一个错误。我可以修补original.script,但这不会帮助modified.script可能会保留错误。我想在复制之前修复original.script,做类似的事情:

% git checkout before-cp
% vim original.script #...
% git add original.script
% git commit -m "fixing a bug in original before I start copying it"
% git checkout master
% git rebase before-cp

但这不符合我想要的方式。重新定义的“创建要修改的副本”提交仍包含modified.script的副本,该副本与未original.script的未修补版本(来自before-cp^)相同。

我很好,我的第一次尝试是错误的做法 - 但是有正确的方法吗?要追溯修补文件以便将来的副本复制修补版本?或者我将不得不手动修补modified.script(以及original.script的副本子树中的任何其他文件。)

1 个答案:

答案 0 :(得分:2)

您必须手动修补modified.script。将original.script复制到modified.script时,新提交只会记录您使用特定文件内容集创建modified.script的事实。在查看diffstat时,git会告诉您复制original.script以创建modified.script推断,提交本身并未实际记录该事实。如果您追溯修改original.script并尝试重新设置创建modified.script的提交,则会重新创建您拥有的完全相同的 modified.script之前,如果你对提交进行了扩展,它看起来就像你复制了original.script,然后在实际提交之前进行了一些更改(有效地还原了你的修复)。

您唯一的解决方案是将同一补丁应用于modified.script