Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Completely remove a file from a git repository history
- #
- # Copyleft 2017 by Ignacio Nunez Hernanz <nacho _a_t_ ownyourbits _d_o_t_ com>
- # GPL licensed (see end of file) * Use at your own risk!
- #
- # Usage:
- # git-forget-blob file_to_forget
- #
- # Notes:
- # It rewrites history, therefore will change commit references
- function git-forget-blob()
- {
- local BLOBS=( $( git verify-pack -v .git/objects/pack/*.idx | grep blob | awk '{ print $1 }' ) )
- for ref in ${BLOBS[@]}; do
- local FILE="$( git rev-list --objects --all | grep $ref | awk '{ print $2 }' )"
- [[ "$FILE" == "$1" ]] && break
- unset FILE
- done
- [[ "$FILE" == "" ]] && { echo "$1 not found in repo history" && return; }
- git filter-branch --index-filter "git rm --cached --ignore-unmatch $FILE"
- rm -rf .git/refs/original/ .git/refs/remotes/ .git/*_HEAD .git/logs/
- git for-each-ref --format="%(refname)" refs/original/ | xargs -n1 --no-run-if-empty git update-ref -d
- git reflog expire --expire-unreachable=now --all
- git repack -A -d
- git prune
- }
- # License
- #
- # This script is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This script is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this script; if not, write to the
- # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- # Boston, MA 02111-1307 USA
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement