From: René Scharfe Date: Sat, 02 May 2026 09:22:49 GMT Subject: Re: [Bug] fetch --deepen truncates history in v2.54.0 Message-ID: In-Reply-To: On 4/29/26 1:27 PM, Owen Stephens wrote: >> What did you do before the bug happened? (Steps to reproduce your issue) > > Repeatedy called `git fetch --deepen 2` inside a shallow repo that was a > file:// clone of another repo. Once all commits had been fetched, a subsequent > `fetch --deepen` appears to "reset" the repo back to being shallow with a depth > of 2. A reproduction script is included below. This issue appears to have been > introduced in v2.54.0. > >> What did you expect to happen? (Expected behavior) > > I expected `git fetch --deepen` in a non-shallow repo with no upstream commits > to be a no-op. > >> What happened instead? (Actual behavior) > > `git log` history is truncated to two commits, and repo is considered shallow > by `git rev-parse --is-shallow-repository`. > >> What's different between what you expected and what actually happened? > > The previously-present commits in `git log` are missing, and the repo is again > considered shallow. > >> Anything else you want to add: > > Commit 3ef68ff seems relevant. Indeed, bisect identifies 3ef68ff40e (shallow: handling fetch relative-deepen, 2026-02-15) and reverting it fixes the issue. Copying its author. > The following script reproduces the issue in 2.54.0, and does not reproduce the > issue in 2.53.0: > > ``` > mkdir repro.git > cd repro.git > > git init > > for i in $(seq 1 4); do > echo "$i" >> file.txt > git add file.txt > git commit -m "Change $i" > done > > cd .. > > git clone --depth 2 "file://$PWD/repro.git" repro_clone.git > cd repro_clone.git > > echo "Shallow repo? $(git rev-parse --is-shallow-repository)" > git log --oneline > > for i in $(seq 1 3); do > git fetch --deepen 2 > echo "Shallow repo? $(git rev-parse --is-shallow-repository)" > git log --oneline > done > ``` Nice! Here's a test for that: diff --git a/t/t5537-fetch-shallow.sh b/t/t5537-fetch-shallow.sh index 6588ce6226..fdb1dd9823 100755 --- a/t/t5537-fetch-shallow.sh +++ b/t/t5537-fetch-shallow.sh @@ -251,6 +251,16 @@ test_expect_success '.git/shallow is edited by repack' ' origin "+refs/heads/*:refs/remotes/origin/*" ' +test_expect_success 'fetch --deepen does not truncate' ' + git clone --no-local .git full-clone && + git rev-parse --is-shallow-repository >expect && + git log --oneline >>expect && + git -C full-clone fetch --deepen=1 && + git -C full-clone rev-parse --is-shallow-repository >actual && + git -C full-clone log --oneline >>actual && + test_cmp expect actual +' + . "$TEST_DIRECTORY"/lib-httpd.sh start_httpd