Elimina el file masivo accidentalmente comprometido en github

Accidentalmente cometí un file masivo hace varios commits, lo he eliminado y lo he comprometido, pero cuando bash presionar, obtengo un error:

'remote: error: GH001: Large files detected.' 

¿Hay alguna manera de que pueda simplemente presionar el estado actual del repository e ignorar esos files que eliminé?

ACTUALIZAR

Cuando ejecuto git rebase obtengo esto …

  C:\Data\unity\GameX4 [patching]> git rebase 4a877be9acb7dbabb46b9aec367d68b2fec7c884 First, rewinding head to replay your work on top of it... Applying: smaller particles again Applying: sdgs Using index info to reconstruct a base tree... M Assets/01_GRAPHICS/03_UNITY_MATERIALS/metaballmat.mat Falling back to patching base and 3-way merge... warning: Cannot merge binary files: Assets/01_GRAPHICS/03_UNITY_MATERIALS/metaballmat.mat (HEAD vs. sdgs) Auto-merging Assets/01_GRAPHICS/03_UNITY_MATERIALS/metaballmat.mat CONFLICT (content): Merge conflict in Assets/01_GRAPHICS/03_UNITY_MATERIALS/metaballmat.mat Failed to merge in the changes. Patch failed at 0002 sdgs The copy of the patch that failed is found in: c:/Data/unity/GameX4/.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". C:\Data\unity\GameX4 [(1697860...)|REBASE +0 ~3 -0 !1 | +0 ~0 -0 !1]> 

Si no ha empujado este file grande (y supongo que es así por el error), simplemente haga una git rebase -i <some commit before the one where the large one was added> y luego elimine la confirmación donde agregó el file file grande. Los commits se reescribirán y tendrás una cadena de commits que no tienen el ofensivo. Podrás empujar esto.

Cuando hagas una rebase -i, verás algo como esto emergente en tu editor. Cuando digo "eliminar" una confirmación, simplemente tiene que eliminar la línea que se refiere a ella en la list (por ejemplo, supongamos que faed141 es la confirmación donde agregó su file grande, simplemente elimine la línea que se refiere a ella en la list siguiente ) Luego guarda y sal de tu editor. Git volverá a escribir la caída del tree que comprometerá y listo.

 pick 53542eb Changes a pick a30f028 Adds b pick faed141 Adds c pick 5446c0f Adds d # Rebase fbd339b..5446c0f onto fbd339b # # 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 # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordenetworking; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out 

En su caso, use git filter-branch para eliminar los files ofensivos de todas las confirmaciones anteriores

  1. Usa el command para eliminar file_name_to_remove

     git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch file_name_to_remove' \ --prune-empty --tag-name-filter cat -- --all 
  2. Una vez completada la twig de filter, verifique que no se haya perdido ningún file no deseado.

  3. Ahora agrega una regla .gitignore

     echo "file_name_to_remove" >> .gitignore git add .gitignore && commit -m "removing filename" 
  4. Ahora haz un empujón

     git push -f origin branch 

Tendrá que hacer un forzado en caso de que ya haya empujado su twig porque las confirmaciones se volvieron a escribir. De lo contrario, si los cambios son solo locales, también puede hacer un push normal. La ventaja añadida es que si ha agregado este file en varias confirmaciones, puede eliminarlo completamente del historial de todas las confirmaciones.