Согласно ответу Адама, вы можете разбить свой большой толчок, содержащий множество коммитов (и их BLOB-объектов), на несколько меньших толчков, каждый из которых содержит подмножество необходимых коммитов для истории вашей ветви.
Ранее я делал это, разбивая полный набор коммитов в блоках, используя временные ветви или теги, но мои более поздние попытки используют встроенный скрипт ниже. Мне не нужно перемещать HEAD или изменять индекс или рабочую копию.
Сначала вам нужно будет определить, насколько агрессивным вы будете с точки зрения количества коммитов для каждого толчка - большее количество коммитов на толчок может быть немного быстрее, но с более высоким риском попадания в ту же проблему. Кроме того, поскольку ваши коммиты будут иметь разные размеры, некоторые периоды в истории могут содержать коммиты с размером, превышающим средний, поэтому некоторые блоки могут быть успешными, тогда как другие требуют дальнейшего разделения. Вы также можете обнаружить, что у вас есть один коммит, который нельзя нажать, и для этого требуется другое решение.
Чтобы перейти в новую удаленную ветку master
, запустите
git log --reverse --oneline | sed -n '0~100p' | awk '{print "git push staging "$1":refs/heads/master"}' | while read i; do eval $i; done
Каждое нажатие будет выдвигать следующие 100 коммитов, и ему нужно только выдвигать новые объекты (или их дельты), найденные в этом пакете коммитов. Наконец, вам нужно нажать текущую HEAD
, чтобы протолкнуть оставшуюся часть коммитов, и создать окончательную удаленную ветку:
git push staging HEAD:master