X-Git-Url: https://git.xandkar.net/?p=git-cheat-sheet.git;a=blobdiff_plain;f=README.md;h=3dbce00338f4f05879d30dcba712e7f87206389e;hp=91c27665fffd9025ce85f5f9bc8aa0bc052bd875;hb=fe79085123faf9e524caa33bf00f0024b6589960;hpb=95f663c4c8150f23d128c2b8ef29056b318fb7b8 diff --git a/README.md b/README.md index 91c2766..3dbce00 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,53 @@ git-cheat-sheet =============== How to do stuff with git + + +Splitting a repo +---------------- + +##### Remove history of all but select files in cloned repo +```sh +$ git clone old new +$ cd new +$ git clean -dfx +$ git gc --aggressive --prune=now +$ git remote rm origin +$ git filter-branch \ + --prune-empty \ + --index-filter ' + git ls-tree -r --name-only HEAD \ + | grep -v file_i_want_to_keep_1 \ + | grep -v file_i_want_to_keep_.. \ + | grep -v file_i_want_to_keep_n \ + | xargs git rm --cached -r --ignore-unmatch + ' \ + HEAD +$ git gc --aggressive --prune=now +``` + +##### Remove history of previously-removed (not in current tree) files +```sh +$ git log --pretty=format: --name-status \ + | awk '$0 != "" {print $2}' \ + | sort -u > /tmp/tree.old +$ git ls-tree -r --name-only HEAD > /tmp/tree.new +$ git filter-branch \ + --prune-empty \ + --index-filter ' + grep -Fvxf /tmp/tree.new /tmp/tree.old \ + | xargs git rm --cached -r --ignore-unmatch + ' \ + HEAD +``` + + +Inserting a new root commit +--------------------------- +```sh +git checkout --orphan $TEMP_BRANCH +git rm -rf . +git commit --allow-empty -m $INIT_COMMIT_MSG +git rebase --onto $TEMP_BRANCH --root $MAIN_BRANCH +git branch -d $TEMP_BRANCH +```