![](/img/trans.png)
[英]git + sourcetree : newly cloned git repo is not allowing to switch branches
[英]cloned repo, its branches and git checkout
我從github克隆了一個帶有2個分支的repo:
git clone https://github.com/user/repo
cd repo
當我做一個git branch
,它只顯示主分支。 然后我做了一個git branch -a
它顯示了所有分支。
master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/develop
然后我做了一個git checkout develop
:
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
然后git checkout master
回到master
分支。
為什么git checkout develop
與git checkout origin/develop
(它說我處於獨立頭狀態)?
你應該做的:
git checkout --track -b develop origin/develop
# or
git checkout -t origin/develop
從git checkout
:如果你沒有指定一個起點,它從當前的HEAD
開始(在你的情況下是master
,意味着你的'develop'分支不是從你認為應該的地方開始)。
在--track選項中,請參閱“ Git:什么是跟蹤分支? ”。
如果要查看/跟蹤本地存儲庫中的所有遠程分支 ,請參閱“將所有遠程git分支跟蹤為本地分支 ”。
你的起點是高手,因為你的git分支返回了當前的分支:master。
如果您在那里進行git checkout
開發,它將從當前分支開始。
當你說git checkout develop(沒有指定遠程“ origin
”)時,它會嘗試簽出一個名為develop
的本地分支。 但是你的gitconfig是這樣設置的,如果它找不到具有該名稱的本地分支,它將自動查找origin/develop
。 它發現並檢出了一個名為develop
本地的新分支,並自動將其設置為跟蹤遠程分支。
當你git checkout origin/develop
,你正在檢查你的上游develop
分支的緩存副本。 您無法編輯這些分支。 這就是為什么git告訴你你處於一個獨立的頭狀態。
如果你想進行更改,你需要提交到本地develop
分支,然后進行git push
。
您還沒有創建分支'develop'。 為此,您需要創建一個遵循“origin / develop”分支的分支:
git checkout -b develop origin/develop
新分支'develop'與遠程分支'origin / develop'分離。 git故意這樣做:去耦允許分支獨立變化。 出於多種原因這是可取的,但我發現最有用的兩個是:
您可以進行一系列更改,這些更改與github分支中所做的更改無關。
除非您希望這些更改,否則github存儲庫中所做的更改不會自動合並到您的分支中。 例如,如果“origin / develop”具有特別不穩定的歷史,您可能希望控制何時將新更改合並到本地分支“develop”中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.