This specifically answers "how do I move my git repo up one or more directories and make it look like it was always that way?"
With the advent of git >= 2.22.0 git filter-repo can be leveraged to rewrite history to appear as if that parent directory had always been part of it.
This is the same thing that @Walter-Mundt's answer accomplishes using git filter-branch, but is simpler and not as fragile to execute.
Note that these days git filter-repo is advertised by git filter-branch itself as the safer alternative.
So, given that your repo lives in /foo/bar/baz and you want to move it up to /foo
First, to prevent any changes to the files in the workspace while history is being rewritten, temporarily turn the repository into a so-called "bare" one like this:
cd /foo/bar/baz
git config --local --bool core.bare true
The actual history rewriting can now be done directly in the .git directory itself:
cd ./.git
git filter-repo --path-rename :bar/baz/
This will rewrite the repo's complete history as if every path has always had bar/baz/ prepended to it (which they would have had, had the repo's root been two levels up).  The actual files are untouched by this operation because this is a bare repository now.
To wrap up, turn it un-bare again, move the .git directory up to its designated position, and reset:
git config --local --bool core.bare false
cd ..
mv ./.git ../..
cd ../..
git reset
I think, the git reset cancels the after-effects of the repository having been  turned bare and back again. Try a git status before doing git reset to see what I mean.
A final git status should now prove that all is well, modulo some new untracked files in /foo/qux to deal with.
CAVEAT - if you try the above on an un-cloned repository, git filter-repo will refuse to do its magic unless you --force it to... Have a backup at the ready and consider yourself warned.