Вот моя проблема:
Я хотел бы откатить репозиторий git до дня 0, правильно импортировать репозиторий svn, затем повторно применить все изменения git, исправив тем самым то, что не было сделано в первый раз.
Кто-нибудь пытался это сделать? Как бы я это сделал? Похоже на мать всех ребазов.
Я никогда не пробовал то, что вы хотите, но я делаю нечто подобное с CVS.
В принципе, я бы предложил:
git fetch
все из репозитория git (общих коммитов не будет)git branch remote/branch branch-last
и git rebase --onto svn-last remote/branch-first branch-last
, где remote/branch-first
- это первая фиксация вашего импортированного репозитория git и т. д.Если у вас больше веток, все будет сложнее. Думаю, можно повторить шаг 3, но лучше попробовать самому. Если в вашей истории git есть слияния, вам может понадобиться git rebase -i -p ...
. Помните, преимущество git в том, что вы в принципе ничего не можете напортачить (особенно, если вы работаете в отдельном репозитории).
Похоже на работу для git grafts. Документация по этому поводу немного отрывочна, но в основном вы хотите сделать следующее:
Вы, конечно, можете выполнить шаг 3 и для всех своих веток. Проблема с подходом jpalecek заключается в том, что rebase сгладит вашу историю, поэтому, если у вас были какие-либо слияния, rebase потеряет их. Подход с фильтром-ветвью сохраняет вашу историю нетронутой.