[英]Clone a repository and checkout branch
我在本地克隆了一個私有存儲庫,它有 3 個分支——master、dev 和 staging。 當它被克隆時,我在主分支中。 當我列出分支時:
git branch -a
我看到了所有的分支。 當我運行時:
git checkout dev
什么也沒發生,我仍然在主分支中。 我試圖拉取並獲取其他分支而沒有運氣。 我不知道如何切換到任何其他分支。
這是一個猜測,但我已經重現了該行為:
sh-3.2$ mkdir txx
sh-3.2$ cd txx
sh-3.2$ git init
Initialized empty Git repository in ...
sh-3.2$ echo test branch name thing > README.md
sh-3.2$ git add README.md
sh-3.2$ git commit -m initial
[master (root-commit) 7dc0be2] initial
1 file changed, 1 insertion(+)
create mode 100644 README.md
sh-3.2$ echo this is a file named dev > dev
sh-3.2$ git add dev
sh-3.2$ git commit -m 'add file named dev'
[master ac01ba6] add file named dev
1 file changed, 1 insertion(+)
create mode 100644 dev
sh-3.2$ git remote add origin .
sh-3.2$ git update-ref refs/remotes/origin/master master
sh-3.2$ git update-ref refs/remotes/origin/dev master
sh-3.2$ echo foo >> dev
sh-3.2$ git checkout dev
這里似乎什么也沒發生,但實際上,確實發生了一些事情:文件dev
被破壞性地檢出。 以下是其內容:
sh-3.2$ cat dev
this is a file named dev
這是我們仍然在master
上的確認:
sh-3.2$ git status
On branch master
nothing to commit, working tree clean
working tree clean
是銷毀更新后的dev
,將其替換為git checkout
從索引中提取的副本。
請注意,所有這些都需要稍舊版本的 Git:
sh-3.2$ git --version
git version 2.20.1
一個更現代的人告訴我們這個問題。 在 Git 2.24 中做同樣的事情會產生:
$ git checkout dev
fatal: 'dev' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
這種事情就是git checkout
現在是兩個單獨的命令的原因, git switch
和git restore
。 使用git switch
:
$ git switch dev
M dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'
做想要的事情。
我的猜測是您還沒有獲取遠程分支。 默認情況下, git checkout 只得到一個分支。 你需要做一個組合
混帳
其次是
git 結帳開發
之后,您應該會看到一條消息
切換到分支“開發”
您的分支是最新的 'origin/dev'
您可以嘗試下面的命令,看看它是否有效“git clone --branch url”它正在獲取所有分支並檢查我們指定的分支。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.