Нет, ты не можешь.
Хэш каждого коммита включает в себя не только хешированное содержимое всех файлов в индексе, но и хэши родителей коммита.
«Исправленный B» будет иметь другого родителя, чем сейчас. Это изменило бы хеш.
Это можно исправить, но невозможно избежать принудительного нажатия на исправление и заставить всех принудительно вытащить его, как только это будет сделано.
Единственным реальным способом исправить это будет следующий процесс:
git checkout A
Проверьте родительский коммит до разветвления ветки. Затем создайте две рабочие ветки:
git checkout -b corrected-mainline
git checkout -b corrected-fork
Теперь вы находитесь на ветке исправленной вилки. Теперь в этой ветке вы сможете git cherry-pick
выполнить все коммиты до F
, пропустив коммит с огромными файлами и его откат. Если какой-либо из этих коммитов является слиянием, сделайте то же слияние.
Теперь сделайте то же самое на ветке corrected-mainline
git checkout corrected-mainline
Теперь git cherry-pick
все коммиты в основной ветке, вплоть до последнего коммита перед G
слиянием. Затем выполните слияние с веткой corrected-fork
. Теперь это ваш исправленный коммит слияния G
.
Завершите выборку всех коммитов, которые изначально были поверх G
на вашей диаграмме, закончив последним коммитом в исходной ветке.
На этом этапе содержимое вашей рабочей ветки должно совпадать с содержимым исходной ветки. Убедитесь, что это так.
Затем удалите исходную ветку и переименуйте рабочую ветку в ее имя. Или используйте git reset --hard
, чтобы сбросить исходную ветку на исправленную рабочую ветку.
Затем сделайте git push --force
, чтобы подтолкнуть исправленную ветвь вверх. Конечно, любой, кто потянет за ветку, в конечном итоге получит силу.
person
Sam Varshavchik
schedule
16.09.2016
huge files
иrevert B
. Затем повторите слияние. Наконец, выберите новые коммиты, которые появятся после этого. - person Tim Biegeleisen   schedule 16.09.2016git filter-branch
для смелых... - person nonsensickle   schedule 16.09.2016git filter-branch
помогло сэкономить место. Хотя еще не придумал, как полностью удалить коммиты с его помощью, для этого случая этого достаточно. - person Xiao   schedule 16.09.2016