2013-12-17 2 views
1

Я обнаружил, что мой файл .gitignore не был включен в мой репозиторий git вообще. У меня около 300 коммитов в моем репозитории с несколькими ветвями, которые я сделал: я использую модель потока git, так что теперь у меня есть мастер, разработка и несколько ветвей функций.необходимо изменить первый коммит или добавить новый коммит до него

Мне все равно, но я хочу изменить первый фиксировать как-то и все версии после него.

, как я вижу это у меня есть два варианта:

  1. добавить в .gitignore в качестве нового коммита до первой фиксации, содержащей только файл .gitignore.
  2. изменить первое обязательство как-то

Я попробовал вариант # 1 с помощью this link, но на перебазироваться я получаю эту ошибку

$ git rebase --onto newroot --root master 
First, rewinding head to replay your work on top of it... 
Applying: First Commit 
fatal: Out of memory, realloc failed 
Repository lacks necessary blobs to fall back on 3-way merge. 
Cannot fall back to three-way merge. 
Patch failed at 0001 First Commit 
The copy of the patch that failed is found in: 
    c:/Temp/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

мой самый большой файл около 40Мб и весь размер проекта составляет около 1,6 Гб , Когда я запустил эту команду, я закрыл все, что работал, и имел около 10 ГБ свободной памяти (у меня всего 16 ГБ).

любые идеи, как это сделать?

+1

Почему просто не пытаетесь исправить существующее репо? Удаление ненужных файлов и т. Д. – Robert

+0

Мне нужно добавить новый файл. на что вы ссылаетесь? –

+0

Я понял. Итак, вам действительно нужен этот файл в первом коммите? Почему бы просто не добавить его только к текущему потоку вверх? – Robert

ответ

0

Я не знал, что git требует увеличения уровня памяти для длинных переустановок. Интересно.

Вы можете выполнить фаза поэтапно. Вы не должны указывать master в качестве цели. Вы можете дать ему фиксацию на полпути вдоль ветки или 1/3 пути. Это не приведет к перемещению основного тега в конце, поэтому вам придется отбросить на нем имя тега или temp branch, но затем вы можете переделать на него следующий бит и сделать все это поэтапно, что ваша память может ручка. В конце вы можете git reset --hard переместить мастер в новую ветку.

+0

, мне кажется, что неудачная перебаза находится в самом первом коммите, который был всего 1,6 ГБ файлов проекта. Я попробую просто переустановить его и скоро обновится по результатам –

+0

, может быть, я вас не понял, но я попробовал запустить «git rebase --onto newroot --root d206a41», где d206a41 - это идентификатор самой первой фиксации. снова я получил из памяти ошибку –

+0

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

1

Вы пробовали интерактивную перебазу?

$ git rebase -i --root 

Затем поставить «править» в первом фиксации. Там добавьте новый файл, затем git rebase --continue, и он сделает все, что вам нужно.

+0

Я попробовал это только сейчас и после быстрого кругового курса в VIM (я использую sourcetree на окнах), который я выбрал для редактирования первого коммита. Я добавил gitignore, используя «git add .gitignore», а затем «git commit -amend», а затем «git rebase -continue».rebasing начал подсчитывать, но потом я получил ошибку «ошибка: не удалось применить 6e2870c ... reformat web.config». эта конкретная фиксация находится в ветви признака, объединенной в развитие ветки в июле. В чем может быть проблема? –

+0

Rebase flattens out объединяет. Вы можете использовать '-p' для сохранения слияний, но это может плохо взаимодействовать с интерактивной перестановкой и редактированием (см. Документацию). Я думаю, что вы будете в порядке, если вы просто исправляете фиксацию root, но вы можете захотеть 'git filter-branch', а не rebase. – torek

+0

torek, есть ли у вас образец того, как добавить файл в первый коммит или добавить новый фиксатор в качестве первого, используя 'git filter-branch'? –

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