Как отменить все коммиты с самого начала
Итак, я переношу с svn (code.google.com) на git (github).
Я импортировал свой проект из репозитория svn и импортировал всю историю фиксации.
Я не очень горжусь этими комментариями, поскольку это был один из моих первых проектов, не очень серьезный.
Я хотел бы переустановить все в единую фиксацию "первоначального импорта".
Я вытащил все на свой компьютер, и я пытаюсь это сделать. Но все, что я нашел, было:
git rebase -i master
, но он только уменьшает новые модификации и фиксирует.
Как очистить репозиторий github из всей истории с помощью rebase?
Ответы
Ответ 1
Вы можете переустанавливать и сквоивать все, если хотите (кроме начального коммита), но зачем беспокоиться? Просто удалите каталог .git, запустите git init
, чтобы воссоздать его, git add
все и git commit
, чтобы создать новое начальное коммит.
Ответ 2
Несмотря на то, что принятый ответ - лучший способ выполнить то, что действительно хотел сделать плакат, теперь можно перезагрузить все коммиты с помощью git rebase -i --root
.
Ответ 3
Ответ Jefromi будет работать, но если вы хотите сохранить свою существующую конфигурацию репо или даже оставить вокруг коммитов на всякий случай, вы можете сделать следующее:
git checkout master
git branch backup
необязательно оставляйте другую ветку здесь, если вы хотите сохранить свою историю.
git reset --soft $SHA_OF_INIT_COMMIT
это обновит то, что указывает HEAD, но оставьте ваш индекс и рабочий каталог в их текущем состоянии. Вы можете получить SHA с помощью git log --pretty=format:%h --reverse | head -n 1
и сделать этот шаг с помощью git reset --soft $(git log --pretty=format:%h --reverse | head -n 1)
git commit --amend
измените первоначальную фиксацию, чтобы указать на текущее состояние вашего репо.
Ответ 4
Найдите хэш коммита, который вы хотите начать раздавать, скажем abcd12
, а затем отмените его против этого хеша.
git rebase -i abcd12
Вы используете master
для переустановки, которая выполняет rebase против вершины главной ветки.
Ответ 5
Если вы хотите сократить всю свою историю до одного фиксации "Первоначальный импорт", просто удалите каталог .git
и создайте новый локальный репозиторий ( сохранение резервной копии старого), git init . && git add . && git commit -m "Initial import"
.
В таком новом репозитории не будет общего предка с тем, который вы нажали на GitHub, поэтому вам нужно git push --force
создать недавно созданный репозиторий.