Я предположил, что «git fetch --depth = N» также может уменьшить неглубокую глубину клонирования. Я вижу это из документации git -fetch (« углубить или сократить историю до указанного количества коммитов ») или, например, на { ссылка }. Но я нашел случай, когда он не работает полностью!
(1) Очистить мелкий клон с глубиной 1:
$ git clone --depth 1 ssh://git@mygitserver/utest.git -b master utest
$ git rev-parse HEAD
407d1cd4147c242f5c1bd3d535fc3f50eeb5e6b3 // latest commit
// Action A (ask which branch contains an older commit) - FAILED:
$ git branch -a --contains 793a5879984f64a62c3d1dc9d047b873571dc103
error: no such commit 793a5879984f64a62c3d1dc9d047b873571dc103
// Action B (checkout an older commit) - FAILED:
$ git checkout -f 793a5879984f64a62c3d1dc9d047b873571dc103
fatal: reference is not a tree: 793a5879984f64a62c3d1dc9d047b873571dc103"
(2) Увеличить глубину до 3:
$ git fetch --depth 3
// Action A (ask which branch contains an older commit) - PASSED (shows all branches):
$ git branch -a --contains 793a5879984f64a62c3d1dc9d047b873571dc103
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
// Action B (checkout an older commit) - PASSED:
$ git checkout -f 793a5879984f64a62c3d1dc9d047b873571dc103
HEAD is now at 793a587
(3) Вернуться на глубину 1:
$ git fetch --depth 1
// Action A (ask which branch contains an older commit) - FAILED (does not show master anymore!):
$ git branch -a --contains 793a5879984f64a62c3d1dc9d047b873571dc103
* (HEAD detached at 793a587)
// Action B (checkout an older commit) - PASSED:
$ git checkout -f 793a5879984f64a62c3d1dc9d047b873571dc103
HEAD is now at 793a587
Я ожидаю, что "git fetch --depth 1" приведет к полному откату к состоянию (1), но это действительно так это частично. Это означает, что что-то осталось из глубины 3 внутри рабочего пространства.
Каков правильный способ достичь желаемого с помощью Git команд без клонирования с нуля?