Git - задним числом исправление файла, который будет скопирован - PullRequest
0 голосов
/ 08 февраля 2012

Предположим, у меня есть git-репозиторий, содержащий original.script.В какой-то момент я хочу сделать что-то похожее на 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 Ответ

2 голосов
/ 08 февраля 2012

Вы должны вручную исправить modified.script. Когда вы скопировали original.script в modified.script, новый коммит просто фиксирует тот факт, что вы создали modified.script с определенным набором содержимого файла. При просмотре diffstat, git скажет вам, что вы скопировали original.script для создания modified.script, но он предположил , что сам коммит фактически не записал этот факт. Если вы ретроактивно измените original.script и попытаетесь перебазировать ваш коммит, который создает modified.script поверх этого, он воссоздаст точно такой же modified.script, который у вас был раньше, и если вы не При фиксации вы увидите, что вы скопировали original.script, а затем внесли некоторые изменения (фактически отменив исправление), прежде чем его зафиксировать.

Единственное решение, которое у вас есть, это применить тот же патч к modified.script.

...