假设我有一个包含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
的副本子树中的任何其他文件。)
答案 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
。