Git делает очень хорошую работу, чтобы отслеживать содержание, даже если он перемещается вокруг, так git mv
явно путь, если вы перемещаете файлы, так как они используются для принадлежат x
, но теперь они принадлежат x/p/q
, так как проект эволюционировал сюда.
Иногда, однако, есть причина для перемещения файлов в подкаталог на протяжении всей истории проекта. Например, если файлы были помещены где-то по ошибке, и с тех пор были сделаны некоторые коммиты, но прерывистые коммиты даже не имеют смысла с файлами в неправильном месте. Если все это произошло в локальном филиале, мы хотим очистить беспорядок до нажатия.
Вопрос гласит: «вместе с историей фиксации», который я бы интерпретировал как переписывание истории именно таким образом. Это может быть сделано с
git filter-branch --tree-filter "cd x; mkdir -p p/q; mv [files & sub-dirs] p/q" HEAD
Файлы затем появляются в p/q
подкаталоге на протяжении всей истории.
Обратите внимание, что результат не должен быть перенесен на общедоступный сервер, если переписывание затрагивает то, что уже было нажато раньше.
git mv сделаю это. – bmargulies
Я не понимаю большинства ответов на этот вопрос, я пробовал все пути, у меня всегда либо была ошибка, либо просто ничего не происходило, поэтому я просто вырезал папку .git и вставил ее в подпапку ... угадайте, что ? Это сработало! – Ayyash