X-Git-Url: https://git.xandkar.net/?p=git-cheat-sheet.git;a=blobdiff_plain;f=README.md;h=3dbce00338f4f05879d30dcba712e7f87206389e;hp=bca3d59d8b7bef65182a80dbfcda8fdd5c017d64;hb=fe79085123faf9e524caa33bf00f0024b6589960;hpb=6b6ba9f3495de246fe962f2b23fc62b966c3ab5b diff --git a/README.md b/README.md index bca3d59..3dbce00 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ How to do stuff with git Splitting a repo ---------------- -### Remove history of all but select files in cloned repo +##### Remove history of all but select files in cloned repo ```sh -$ cp -Rp old new +$ git clone old new $ cd new $ git clean -dfx $ git gc --aggressive --prune=now @@ -27,9 +27,28 @@ $ git filter-branch \ $ git gc --aggressive --prune=now ``` -### Remove history of previously-removed (not in current tree) files +##### 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 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 +$ 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 ```