我試過這個來獲取一個遠程分支:
% git fetch origin bugfix
控制臺告訴我:
From github.com:*****/sdn-prjkt
* branch bugfix -> FETCH_HEAD
看來是撿來的。但是當我嘗試列出所有分支但未獲取到本地時:
% git branch
* main
還在遠程:
% git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/bugfix
remotes/origin/main
我可以知道為什么嗎?
uj5u.com熱心網友回復:
你的樹枝是你的。該git fetch命令獲取提交:您和他們1 共享提交,這些提交始終是完全只讀的,因此他們無法更改您的提交,您也無法更改他們的提交,因此共享它們是完全安全的。但是git fetch沒有得到任何分支。
相反,您的 Git使用您的遠程跟蹤名稱記住它們的分支。您可以用或像剛才那樣列出這些。遠程名稱的遠程跟蹤名稱在其前面拼寫為:、等。git branch -rgit branch -aoriginorigin/origin/mainorigin/bugfix
無緣無故,將git branch -r這些顯示為,origin/bugfix但將git branch -a它們顯示為remotes/origin/bugfix。事實是,這些名稱中的每一個都被縮短了:
- 您的分行名稱
main是refs/heads/main; - 您的遠程跟蹤名稱
origin/main是refs/remotes/origin/main;
等等。Gitrefs/heads/在縮短分支名稱時從分支名稱中洗掉,在縮短refs/tags/標簽名稱時從標簽名稱中洗掉refs/remotes/,refs/在縮短這些名稱時從遠程跟蹤名稱中洗掉,有時只是。
如果你想擁有自己的分支名稱,你只需告訴 Git:為我創建一個新的分支名稱bugfix,使用我剛剛在他們的 Git 上看到的相同提交,他們稱之為bugfix,我稱之為origin/bugfix。
此命令的長格式是:
git branch --track bugfix origin/bugfix
之后git checkout bugfixorgit switch bugfix發現您有一個名為 的分支bugfix,并切換到該分支并提取該分支的提示提交作為當前提交。(請記住,每個提交都包含每個檔案的完整快照——盡管是特殊的、只讀的、僅限 Git 的、壓縮和重復資料洗掉的形式——因此要使用提交,Git 必須提取其檔案。)
不過有一條捷徑:
git checkout bugfix
或者:
git switch bugfix
開始準備抱怨,嘿,沒有名為 的分支bugfix,我們不可能那樣做——但是,因為你沒有說--no-guess,他們使用 Git 過去呼叫DWIM 模式的方式來猜測他們是否應該創建一個名為的分支bugfix.
猜測一下,他們會查看您所有的遠程跟蹤名稱,就好像您會運行git branch -r. 如果確實有一個看起來正確的——比如——origin/bugfix他們會自動git branch為你執行那個命令。2 然后,現在您有了bugfix,他們就可以成功切換到它了。您將收到有關已切換到新創建的分支的訊息。
1您在這里是指您的 Git 軟體,在您的計算機上運行,??在您的存盤庫上運行。 他們的意思是他們的 Git 軟體,在他們的計算機上運行,??在他們的存盤庫上運行。請注意,這里有兩個獨立的 Git 存盤庫。該git fetch操作意味著呼叫他們的 Git 并獲取他們擁有的任何提交,我沒有,他們愿意交出。然后,根據您看到的分支名稱,創建或更新我的遠程跟蹤名稱以匹配其分支名稱。
2他們是否使用git branch --track或git branch --no-track實際上是可配置的,但默認是使用--track. 小心這個動詞track: Git 過度使用它,所以當你在 Git 的其他地方看到它時,它可能指的是 this,但它可能指的是別的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/349268.html
標籤:混帐
下一篇:從本地存盤庫克隆,然后推回更改
