2016-11-28 3 views
0

Как я недавно пытался подтолкнуть свои коммиты к github, я получил то же сообщение об ошибке, что и в этом question. Я удалил файлы из своего репозитория, но теперь должен очистить историю. Как было сказано в ответах, я посмотрел на BFG, который, кажется, является решением. При чтении через instructions он начинается с использования git --mirror link-to-remote-repo.чистка истории git с BFG

Теперь мне интересно, потому что я еще не мог нажимать новейшую фиксацию, и, вероятно, моя локальная история фиксации длиннее, чем на github. Кроме того, я не уверен, поскольку вся работа, которую я делал, связана с веткой, а не с мастером, и как она влияет на мой репозиторий.

+0

Что такой вопрос? – Ivan

+0

Я не понимаю, что для использования BFG я должен сделать пустой клон ('--mirror') моего удаленного репозитория. Но это не актуально. Так как это будет работать? Я очищаю историю удаленного зеркала, но по-прежнему существует «некоторая история» об этом файле, оставленном в моем локальном репозитории в сообщениях, которые я сделал после того, как последний раз я нажал на github. – fukurai

+0

Хорошо. Если у вас нет большого количества изменений (совершается), вы можете сделать это вручную: проверить новую ветку на основе фиксации; Для каждой фиксации (из проблемной ветви) - 1) используйте команду 'git cherry-pick --no-commit'; 2) удалить из двоичного файла с индексом проблемный (если существует); 3) commit – Ivan

ответ

0

Руководство раствор (на основе cheery pick)

EDIT: Перед тем, как начать, пожалуйста, совершить или копить локальные изменения.

Скажем, у нас есть две ветви master и dev, которые имеют общие совершаем SHA1 = X. Branch dev содержит совершает A1, A2, ..., А16

  • git checkout dev
  • git checkout -b new-dev
  • git reset --hard X

Для каждой фиксации в dev (A1, ..., A16):

  • git cherry-pick A1 --no-commit
  • Проверить индексирование с git status
  • Удалить проблематичные двоичные файлы из индекса git reset HEAD myfolder/mybinary.rpm
  • удалить файл git rm myfolder/mybinary.rpm
+0

Итак, для меня, чтобы понять, 1. Я создаю новую ветку 'new-dev' и do' git reset --hard X' Отбрасывает все изменения любого отслеживаемого файла в 'new-dev'. 2. Я выполняю коммит в 'dev', используя' git cherry-pick', чтобы удалить файл, как вы описали. Теперь я в последний раз. Слияние сначала с 'new-dev', а затем с' master'? Как вернуть мой репозиторий к последней фиксации, только без плохих файлов? – fukurai

+0

После того, как вы сделали все шаги, у вас есть новая ветка 'new-dev' с« той же »историей, что и в двоичных файлах ветви' dev' минус «bad». Вы должны увидеть, что тот же самый номер зафиксирован в 'new-dev', как в' dev' с теми же комментариями. Итак, теперь вы должны объединить 'new-dev' в свой' master'. Позже, когда вы действительно уверены, что все правильно, вы можете удалить ветвь 'dev'. – Ivan

+0

Я вижу. Но тогда я 'git cherry-pick' на' new-dev', а не на 'dev', или? – fukurai

Смежные вопросы