I am building some CI tooling, and I am working with a large-ish repository, so I am trying to start with a shallow clone of the repository and deepen it on demand. I am finding it very difficult to correctly switch between fetch --depth and fetch --deepen. I am looking for a way to "recover" from a fetch --depth call that made my history shallower than before. Ultimately, I may take a different approach to just work around this altogether, but I thought I'd ask here first. In particular, if there is history like this: A --- B --- C --- D --- E --- F \ \ ---------------- G And my shallow history includes D..F, then I believe I am limited in my options for fetching G: - If I do a plain fetch of G, or if I use --deepen, then I pull in A and all of its history, which I don't strictly need or want yet. - If I know G's parent is B, and I fetch --depth=1, then (I think) I will see B, E, F, and G, effectively losing sight of D As a more contrived example, suppose I have a shallow clone of a repository: bash-3.2$ git clone --depth=4 -q git@xxxxxxxxxx:git/git.git bash-3.2$ cd git bash-3.2$ git log --format='%h %d' 3034dab (HEAD -> master, origin/master, origin/HEAD) 98e06de 352253a 4098130 (grafted) 7b974e3 df63c2e 75ce486 (grafted) 70b39fb (grafted) afc3bf6 (grafted) bash-3.2$ cat .git/shallow 409813088ad55ae4a60f55412f6b5ba6a89d89e7 70b39fbede78313656e8a6bd9b38b238ab10db2f 75ce48674889df6a2bb493fb5d6bef0ef60ca7ae afc3bf6eb13d9fc489b569164819cff44db8ac17 And then suppose I fetch with depth smaller than before: bash-3.2$ git fetch --depth=1 -q bash-3.2$ git log --format='%h %d' 3034dab (grafted, HEAD -> master, origin/master, origin/HEAD) bash-3.2$ cat .git/shallow 3034dab9ed6b11970a53099a7b3ca981f1461365 409813088ad55ae4a60f55412f6b5ba6a89d89e7 70b39fbede78313656e8a6bd9b38b238ab10db2f 75ce48674889df6a2bb493fb5d6bef0ef60ca7ae afc3bf6eb13d9fc489b569164819cff44db8ac17 I can still see the commits I had before the --depth=1 fetch: bash-3.2$ git log -1 --format=oneline 75ce486 75ce48674889df6a2bb493fb5d6bef0ef60ca7ae (grafted) Merge branch 'di/readme-markup-fix' Short of looking through .git/shallow and removing each entry whose parents I can resolve, is there a built-in command to "unshallow based on local objects"? I have tried many web search terms, I have looked through the docs for many low-level git commands, I have tried variations of "git fetch .", and I am stumped.