нажатие мерзавца после удаления большого файла

Я случайно фиксировал log/test.log, но никогда не продвигал его. Я с тех пор сделал комнату мерзавца для избавлений от него. Но когда я пытаюсь продвинуть, я все еще получаю огромный объем данных, пытающийся быть переданным. Не был должен комната мерзавца решать ту проблему. В противном случае, как я мог зафиксировать его?

6
задан Daniel 24 February 2010 в 15:17
поделиться

2 ответа

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

Учитывая, что вы еще не нажали его и что коммит, который вы хотите повторить, является самым последним, удалите этот коммит из своей истории:

$ git reset HEAD^

Это вернет ваш индекс в то состояние, в котором он находился в родительском коммите ( ГОЛОВА ^ ). Теперь у вас есть пересдача: добавьте и зафиксируйте так, как вы хотели в первый раз.

Если вы сделали другие последующие коммиты, вам потребуется git rebase -i , где - это SHA-1 родительского элемента плохой фиксации. .

Например (обратите внимание, что SHA-1 в вашем репозитории будет другим)

$ git rebase -i 57d0b28

откроет вам редактор, похожий на

pick 366eca1 This has a huge file
pick d975b30 delete foo
pick 121802a delete bar

# Rebase 57d0b28..121802a onto 57d0b28
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Замените pick на edit на строка с тяжелой фиксацией

edit 366eca1 This has a huge file
pick d975b30 delete foo
pick 121802a delete bar

Сохраните и выйдите из редактора, чтобы вернуться в свою оболочку, где вы увидите сообщение формы

Stopped at 366eca1... This has a huge file
You can amend the commit now, with

    git commit --amend

Once you are satisfied with your changes, run

    git rebase --continue

Оттуда удалите проблемный файл ( - cached удаляет файл только из индекса)

$ git rm --cached big-nasty-file
rm 'big-nasty-file'

изменить фиксацию

$ git commit --amend

и завершить перебазирование

$ git rebase --continue
11
ответ дан 8 December 2019 в 18:35
поделиться

Если вы еще не нажали, вы можете использовать git rebase -i , чтобы отредактировать историю коммитов, удалив как добавьте и rm . Единственное предостережение: вы должны быть осторожны, чтобы не редактировать какие-либо коммиты, которые уже были отправлены.

http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

Вы спросили, можете ли вы еще сделать это, если есть другие изменения в коммите и другие коммиты, следующие за этим. По-разному. У вас должна быть возможность редактировать / удалять любую не отправленную фиксацию, а не только самую последнюю. Но перебазирование может завершиться неудачно, если последующие изменения сильно зависят от изменений в удаленной фиксации (например, вы добавили файл, а затем отредактировали его в более поздней фиксации). Если вы удалите фиксацию, вы потеряете все изменения в этой фиксации. Я не знаю, как удалить одно изменение из фиксации. Если вы не хотите потерять другие изменения в тесте.rb commit, вы можете сгенерировать патч (с помощью git show > / tmp / patch или со встроенными функциями git patch ) перед удалением фиксации. Затем отредактируйте файл патча, чтобы удалить большой test.rb, но оставьте желаемые изменения и повторно примените патч к голове.

Если у вас есть проблема, о которой я упоминал ранее, когда происходит сбой перезагрузки (или вы думаете, что она не удалась), вы можете сохранить исправления для всех ваших коммитов после фиксации проблемы, удалить их все и повторно применить. чтобы.

2
ответ дан 8 December 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: