如何簽出遠程Git分支?

How do I check out a remote Git branch?
投票:6379回答:30

有人用git push origin test將一個名為test的分支git push origin test送到共享存儲庫。 我可以看到git branch -r

現在,我正在嘗試簽出遠程test分支。

我試過了:

  • git checkout test ,什麼都不做

  • git checkout origin/test給出* (no branch) 這令人困惑。 我怎麼會處於“無分支”狀態?

如何簽出遠程Git分支?

tags:git,git-checkout,remote-branch
30回答
107
投票

這將對未命名的遠程DWIM文檔 ):

$ git checkout -t remote_name/remote_branch

要添加新的遙控器,您首先需要執行以下操作:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

第一個告訴Git遠程存在,第二個告訴提交。


458
投票

接受的答案對您不起作用?

儘管第一個選擇的答案在技術上是正確的 ,但有可能您尚未從遠程存儲庫中檢索所有對象和引用。 如果是這種情況,您將收到以下錯誤:

$ git checkout -b remote_branch origin/remote_branch

致命:git checkout:更新路徑與切換分支不兼容。
您是否打算簽出無法解決為提交的“ origin / remote_branch”?

如果收到此消息,則必須先執行git fetch origin ,其中origin是遠程存儲庫的名稱,然後再運行git checkout remote_branch 這是帶有響應的完整示例:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

如您所見,運行git fetch origin檢索我們尚未設置要在本地計算機上跟踪的任何遠程分支。 從那裡開始,由於我們現在有了對遠程分支的引用,因此我們只需運行git checkout remote_branch即可獲得遠程跟踪的好處。


54
投票

要克隆Git存儲庫,請執行以下操作:

git clone <either ssh url /http url>

上面的命令簽出所有分支,但是只有master分支會被初始化。 如果要結帳其他分支,請執行以下操作:

git checkout -t origin/future_branch (for example)

此命令檢出遠程分支,您的本地分支名稱將與遠程分支相同。

如果要在結帳時覆蓋本地分支機構名稱,請執行以下操作:

git checkout -t -b enhancement origin/future_branch

現在你的本地分支的名字是enhancement的,但你的遠程分支的名字是future_branch

文獻資料


24
投票

如果分支不在origin遠程站點上,則我要執行以下操作:

$ git fetch
$ git checkout -b second/next upstream/next

這會將簽出upstream遠程站點上的next分支簽入名為second/next的本地分支。 這意味著,如果您已經有一個名為next的本地分支,則不會發生衝突。

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next

16
投票

git branch -r表示對象名稱無效,因為該分支名稱不在Git的本地分支列表中。 使用以下命令從來源更新本地分支列表:

git remote update

然後嘗試再次簽出您的遠程分支。

這對我有用。

我相信git fetch拉入所有遠程分支,這不是原始發布者想要的。


8780
投票

更新資料

雅庫布的答案實際上對此有所改善。 使用≥1.6.6的Git版本,並且只有一個遙控器,您可以執行以下操作:

git fetch
git checkout test

正如用戶masukomi在評論中指出的那樣,如果您有多個遙控器,則git checkout test在現代git中將不起作用。 在這種情況下使用

git checkout -b test <name of remote>/test

或速記

git checkout -t <name of remote>/test

舊答案

在開始在遠程分支上進行本地工作之前,您需要按照下面的答案中的說明獲取它。

要獲取分支,您只需要:

git fetch origin

這將為您獲取所有遠程分支。 您可以通過以下方式查看可用於結帳的分支:

git branch -v -a

有了遠程分支之後,您現在需要檢出您感興趣的分支,並為您提供本地工作副本:

git checkout -b test origin/test

544
投票

在這種情況下,你可能需要創建一個本地test分支,它是跟踪遠程test分支:

$ git branch test origin/test

git早期版本中,您需要一個顯式的--track選項,但這是從遠程分支分支時的默認選項。


1221
投票

旁注:使用現代Git(> = 1.6.6 ),您可以僅使用

git checkout test

(請注意,執行神奇的DWIM -mery並為您創建本地分支“ test”是“測試”而非“起源/測試”),上游將是遠程跟踪分支“起源/測試”。


git branch輸出中的* (no branch)表示您處於未命名分支,處於所謂的“分離的HEAD”狀態(HEAD指向直接提交,而不是對某些本地分支的符號引用)。 如果您在此未命名分支上進行了一些提交,則始終可以從當前提交創建本地分支:

git checkout -b test HEAD

241
投票

我嘗試了上述解決方案,但是沒有用。 試試這個,它的工作原理:

git fetch origin 'remote_branch':'local_branch_name'

這將獲取遠程分支並創建一個名為local_branch_name的新本地分支(如果尚不存在),並在其中跟踪遠程分支。


36
投票

你可以試試

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

要么

git fetch
git checkout -b local_branch_name origin/branch_name

15
投票

git fetch && git checkout your-branch-name


1
投票

請按照命令創建一個空文件夾。 輸入並使用以下命令:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'

101
投票

使用:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

在我的良性案例中,其他答案不適用於現代Git。 如果遠程分支是新的,則可能需要先拉,但是我沒有檢查這種情況。


28
投票

指令

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

等於

 git fetch --all

然後

 git checkout -b fixes_for_dev origin/development

兩者都會從development創建latest fixes_for_dev


31
投票

首先,您需要執行以下操作:

git fetch #如果您不知道分支名稱

git fetch origin branch_name

其次,您可以通過以下方式將遠程分支簽出到本地:

git checkout -b branch_name origin/branch_name

-b將在您選擇的遠程分支中以指定名稱創建新分支。


8
投票

其他人和女同性戀者提供了解決方案,但也許我可以告訴你原因。

git checkout測試,什麼都不做

Does nothingdoesn't work ,所以我猜想當您在終端中輸入“ git checkout test”並按回車鍵時,不會出現任何消息,也不會發生錯誤。 我對嗎?

如果答案為“是”,我可以告訴您原因。

原因是您的工作樹中有一個名為“ test”的文件(或文件夾)。

git checkout xxx解析時,

  1. Git首先在xxx上將其作為分支名稱,但沒有任何名為test的分支。
  2. 然後,Git認為xxx是路徑,幸運的是(或不幸的是)有一個名為test的文件。 所以git checkout xxx意味著放棄對xxx文件的任何修改。
  3. 如果也沒有名為xxx文件,則Git將嘗試根據一些規則創建xxx 規則之一是如果存在remotes/origin/xxx則創建一個名為xxx的分支。

6
投票

您可以使用以下Bash腳本開始跟踪所有遠程分支:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

這也是單行版本:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

83
投票

好的 ,答案很簡單...您基本上可以看到分支,但是您還沒有本地副本!...

您需要fetch分支...

您可以簡單地提取然後簽出到分支,使用下面的一行命令來執行該操作:

git fetch && git checkout test

我還創建了下面的圖像供您共享差異,看一下fetch工作原理以及pull的不同之處:

git獲取


27
投票

我使用以下命令:

git checkout --track origin/other_remote_branch

11
投票

git remote show <origin name>命令將列出所有分支(包括未跟踪的分支)。 然後,您可以找到需要獲取的遠程分支名稱。

例:

$ git remote show origin

使用以下步驟獲取遠程分支:

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

例:

$ git fetch origin test:test
$ git checkout test

8
投票

獲取新創建的分支

git fetch

切換到另一個分支

git checkout BranchName

8
投票

從遠程獲取並檢出分支。

git fetch <remote_name> && git checkout <branch_name> 

例如:

git fetch origin && git checkout feature / XYZ-1234-Add-alerts


17
投票

這些答案都不適合我。 這工作:

git checkout -b feature/branch remotes/origin/feature/branch


13
投票

只需使用遠程分支的名稱運行git checkout Git將自動創建一個本地分支來跟踪遠程分支:

git fetch
git checkout test

但是,如果在多個遠程中都找到了該分支名稱,則該名稱將不起作用,因為Git不知道使用哪個名稱。 在這種情況下,您可以使用以下任一方法:

git checkout --track origin/test

要么

git checkout -b test origin/test

2.19中 ,Git學習了checkout.defaultRemote配置,該配置指定了解決這種歧義時默認使用的遠程。


17
投票

我陷入了看到error: pathspec 'desired-branch' did not match any file(s) known to git.的情況error: pathspec 'desired-branch' did not match any file(s) known to git. 以上所有建議。 我正在使用git版本1.8.3.1。

所以這對我有用

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

後面的解釋是,我注意到在獲取遠程分支時,它已被獲取到FETCH_HEAD:

$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD

1
投票

如果遠程分支名稱以特殊字符開頭,則需要在checkout命令中使用單引號引起來,否則git將不知道您在談論哪個分支。

例如,我嘗試簽#9773#9773的遠程分支,但是該命令無法正常工作,如下圖所示:

在此處輸入圖片說明

由於某種原因,我想知道尖銳的符號(#)是否與它有關,然後我嘗試將分支名稱用單引號引起來,例如'#9773' 9773'rathen而不是#9773 ,並且工作正常。

$ git checkout -b '#9773' origin/'#9773'

3
投票

使用fetch來拉動所有遙控器

   git fetch --all

列出遠程分支機構:

   git branch -r

為列出您所有的分支

   git branch -l
   >>outpots like-
     * develop
       test
       master

結帳/更改分支

   git checkout master

0
投票

對於我們來說,似乎remote.origin.fetch配置出現了問題。 因此,除了master之外,我們看不到其他任何遠程分支,因此git fetch [--all]沒有幫助。 git checkout mybranchgit checkout -b mybranch --track origin/mybranch沒有用,儘管它肯定在遠程。

先前的配置只允許獲取master

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

通過使用*修復,並從來源獲取新信息:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

$ git fetch
...
 * [new branch] ...
...

現在我們可以在本地git checkout遠程分支了。

不知道此配置如何在我們的本地存儲庫中結束。


0
投票

要獲取所有遠程分支,請使用以下命令:

git fetch --all

然後結帳到分支:

git checkout test

1
投票

有很多選擇,例如:

  • 選擇1:

     git fetch && git checkout test 

    這是最簡單的方法。

  • 選擇2:

     git fetch git checkout test 

    一樣,只是在兩個陡峭的地方。


©2020 sofbug.com - All rights reserved.