簡體   English   中英

克隆存儲庫並簽出分支

[英]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 switchgit 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM