Если я вас правильно понимаю, вы в основном хотите оригинальное репо как есть, но с удаленными / перемещенными файлами, соответствующими ветке (поскольку все изменения, сделанные в оригинале, уже находятся в вилке).Поскольку форк на самом деле не является форком (на основе проверки), я бы, вероятно, попытался воспроизвести операции удаления / перемещения, выполненные в форке, в origin.
С помощью git log вы можете использовать --diffАргумент -filter, чтобы узнать, какие файлы были удалены и / или перемещены.Должна быть возможность проанализировать выходные данные этой команды и выполнить «git rm» (и «git mv» соответственно) на этих выходных данных.
Чтобы увидеть, какие файлы были удалены, вы можете сделать что-то вроде:
git log --diff-filter=D --date-order --reverse --name-status | grep -E '^D[[:blank:]]+'
, что в одном из моих репозиториев дает:
D dwgdirect/lib_340/vc10/dbg/td_gi.pdb
D dwgdirect/lib_340/vc10/dbg/td_gs.pdb
D dwgdirect/lib_340/vc10/dbg/td_spatialindex.pdb
D kernel/custom/dwgdirect/namespace.h
D std/res/hdracking/db/editablesettings.db
D std/res/hdracking/db/settings.db
D std/res/hdracking/om.res
Сделайте то же самое, что и выше, но замените D на M в --diff-filter и в grep regexp, чтобы получить перемещенные файлыНапример,
git log --diff-filter=M --date-order --reverse --name-status | grep -E '^M[[:blank:]]+'
Передайте выходные данные в awk, чтобы разобрать точные имена файлов и избавиться от букв D и M (я не смог заставить awk работать с моим cygwin, поэтому вы должны попробовать это длясам).Оберните все это в скрипт, который выполняет "git rm" и "git mv" в каждой строке каждого цикла.