[英]How to fetch all git history after I clone the repo with `--depth 1`?
[英]How do fetch remote branch after I cloned repo with git clone --depth 1
我有很長的歷史回購,所以克隆使用
git clone <url> --depth 1
現在我在主分公司。
如何獲取名為'feature / my-feature'的遠程分支,該分支早先已分支3次提交?
我試過了:
git checkout -b feature/my-feature origin/feature/my-feature
和
git fetch -all
但我仍然只看到主分支
您可以通過指定獲取深度來嘗試強制它:
git fetch --depth=999999
深度是提交的數量。 請注意,當您執行克隆時,clone實際上會執行提取,並且深度與提取中指定的深度相同。
如果需要,將該數字設為更大!
編輯
你也可以/可能 - 應該使用加深 - 相同的語法,但它有效地從你最后指定的深度的位置取消..所以它更有效:
git fetch --deepen=999999
它可能取決於你的git版本,但最后一個....
編輯2
剛看完git docs時看到了這個....
git fetch --unshallow
這將是最好的方式(不確定它在哪個版本中實現,我沒有嘗試過....但看起來像是要使用的東西)。
你需要:
git config --add remote.origin.fetch \
+refs/heads/feature/my-feature:refs/remotes/origin/feature/myfeature
要么:
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
其次是:
git fetch
git fetch --depth=<number>
git fetch --deepen=<number>
git fetch --unshallow
當你做一個淺的克隆時,Git會調整兩件事:
(運行git clone
是一種簡寫,就像它一樣,用於執行一系列包含git init
, git remote add
, git fetch
和git checkout
的Git命令。如果需要,可能還會使用更多命令。)
特別是, - --depth 1
具有添加--single-branch
的副作用。 如果你還沒有使用顯式的--no-single-branch
取消它,Git將配置fetch
行,就好像你已經運行:
git config remote.origin.fetch +refs/heads/<branch>:refs/remotes/origin/<branch>
這告訴后來的git fetch
命令只帶來給定的<branch>
,而不是其他的。
普通(非淺,非單分支) git clone
使用默認設置:
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
它告訴每個后來的git fetch
帶來每個分支。
然后,將所有將來的fetch
操作配置為單分支,淺克隆使用指定的--depth
獲取,該命令使用名為.git/shallow
的文件插入特殊的“移植”條目。 這些會影響克隆的整體有用性(但在任何現代Git中都要少得多); 有關這方面的更多信息,請參閱使用--depth 1進行淺層克隆是否安全,創建提交並再次提取更新? 但是,請注意,這不會保留--depth
數字。 它只是縮短了初始提取時間。 未來提取的行為,特別是那些使用不同引用名稱的行為,很難從中預測。
如果你運行git fetch --unshallow
,Git會找到所有淺層截止點,並在此之前重新獲取所有歷史記錄。 然后Git完全刪除了特殊的.git/shallow
文件,克隆的行為就像一個非淺的克隆。 這與克隆是否像--single-branch
克隆的行為無關。
如果你使用特定的--depth
或--deepen
運行git fetch
,Git會根據需要設置新的淺截止值,將深度設置為你指定的數字,或者用你指定的數字增加任何現有的淺截止值。 如果有多個分支,它們的各種截止之間的關系是復雜的(它都是基於圖形行走而沒有代碼檢查或測試,很難說Git在一些棘手的情況下會如何表現)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.