Как отменить все коммиты с самого начала - PullRequest
40 голосов
/ 22 декабря 2011

Итак, я перехожу с svn (code.google.com) на git (github).

Я импортировал свой проект из репозитория svn, и он импортировал всю историю коммитов.Я не очень горжусь этими комментариями, так как это был один из моих первых проектов, не очень серьёзный.

Я хотел бы преобразовать все в один коммит "первоначального импорта".

Я вытащил все на своем компьютере, и я пытаюсь это сделать.Но все, что я нашел, было: git rebase -i master, но оно только отменяет новые модификации и фиксирует.

Как я могу очистить свой репозиторий github от всей истории с помощью rebase?

Ответы [ 5 ]

131 голосов
/ 20 января 2017

git rebase -i --root начнет интерактивную перебазирование всех коммитов с самого начала.

Оттуда вы можете раздавить все коммиты в один и / или выполнить другие правки.

16 голосов
/ 22 декабря 2011

Вы можете перебазировать и раздавить все, если хотите (кроме первоначального коммита), но зачем?Просто удалите каталог .git, запустите git init, чтобы воссоздать его, git add все и git commit, чтобы сделать новый начальный коммит.

11 голосов
/ 01 октября 2014

Ответ Джефроми сработает, но если вы хотите сохранить существующую конфигурацию репо или даже оставить коммиты на всякий случай, вы можете сделать следующее:

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, чтобы изменить первоначальный коммит, чтобы он указывал на текущее состояние вашего репо.

5 голосов
/ 22 декабря 2011

Найдите хеш коммита, с которого вы хотите начать сжатие, скажем, с abcd12, а затем специально сделайте ребаз против этого хеша.

git rebase -i abcd12

Вы используете master для перебазирования против, которое выполняет перебазирование против кончика главной ветви.

2 голосов
/ 22 декабря 2011

Если вы хотите сократить всю историю до одного коммита «Первоначальный импорт», просто удалите каталог .git и создайте новый локальный репозиторий (, сохраняющий резервную копию старого). git init . && git add . && git commit -m "Initial import".

У такого нового репозитория не будет общего предка с тем, который вы перенаправили в GitHub, поэтому вам придется git push --force ваш недавно созданный репозиторий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...