branch delete - Git獲取遠程分支




remote push (21)

我和我的同事正在研究同一個存儲庫,我們將它分為兩個分支,每個分支在技術上適用於不同的項目,但它們有相似之處,所以我們有時想要從分支中重新提交給* master。

但是,我有分支,我的同事怎能具體拉那個分支。 回購的git clone似乎並沒有為他在當地創建分支,儘管我可以在推動我的結局之後看到他們生活在一個無情的世界。

另外,當我最初做分支時,我做了-b checkout 。 不知道這是否有很大的不同?

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

這是我跑的命令。 但絕對不行。 我希望能夠檢出該分支,然後推送並恢復來自各個協作者或工作站的分支更改。


Answers

您需要創建一個跟踪遠程分支的本地分支。 以下命令將創建一個名為daves_branch的本地分支,用於跟踪遠程分支源/ daves_branch 。 當你推動你的改變時,遠程分支將被更新。

對於大多數版本的git:

git checkout --track origin/daves_branch

--trackgit checkout -b [branch] [remotename]/[branch]縮寫git checkout -b [branch] [remotename]/[branch]其中[remotename]是本例中的起源 ,[branch]是兩次相同的daves_branch

對於git 1.5.6.5,你需要這個:

git checkout --track -b daves_branch origin/daves_branch

對於git 1.7.2.3和更高版本,這已經足夠了(可能已經開始更早了,但這是我可以快速找到的最早的確認):

git checkout daves_branch

請注意,使用最近的git版本,該命令不會創建本地分支,並會使您處於“分離的HEAD”狀態。 如果您想要本地分支,請使用--track選項。 全部細節在這裡: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches : http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches


git fetch --all & git checkout <branch name>


git checkout -b serverfix origin/serverfix

這是一種常見的操作,git提供了--track簡寫:

git checkout --track origin/serverfix

事實上,這很常見,甚至有捷徑的捷徑。 如果您試圖結賬的分行名稱(a)不存在,並且(b)只與一個遠程名稱完全匹配,Git會為您創建一個跟踪分行:

git checkout serverfix

要使用不同於遠程分支的名稱設置本地分支,您可以輕鬆使用具有不同本地分支名稱的第一個版本:

git checkout -b sf origin/serverfix

現在,您的本地分支sf將自動從origin / serverfix拉出。

資料來源: Pro Git 2nd Edition,由Scott Chacon和Ben Straub撰寫 (剪切以提高可讀性)


檢查遠程存在的myBranch而不是本地 - 這對我有用:

git fetch --all
git checkout myBranch

我收到了這條消息:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

我使用了fetch然後是checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

...其中<rbranch>是遠程分支或源代碼<lbranch>是您要跟踪的尚不存在的本地分支或目標引用 ,以及您可能想要將其命名為遠程分支或源代碼引用。 這在<refspec>的解釋中的options下進行了解釋。

Git非常聰明,如果我在遠程分支的前幾個字母后面標籤 ,它會自動完成第一條命令。 IE:我甚至不需要命名本地分支,Git自動為我複制遠程分支的名稱。 謝謝Git!

同樣在這篇相似的SO文章中的答案顯示,如果您沒有在fetch命名本地分支,那麼當您使用-b標誌簽出時仍然可以創建它。 IE: git fetch <remote> <branch>後跟git checkout -b <branch> <remote>/<branch>與我的初始答案完全一樣。 顯然,如果您的回購只有一個遠程,那麼您可以在fetch後執行git checkout <branch> ,它將為您創建一個本地分支。 EG:您剛剛克隆了一個回購協議,並希望查看遠程的其他分支。

我相信一些fetch文檔可能已經逐字複製。 特別是options中的<refspec>部分是相同的。 然而,我不相信fetchmerge ,所以如果你離開冒號的目標端,空的fetch 應該什麼也不做

注意: git fetch <remote> <refspec>git fetch <remote> <refspec>的縮寫,因此它不會執行任何操作,但git fetch <remote> <tag>git fetch <remote> <tag>:<tag>應該在本地複制遠程<tag>

我想這只有在你想在本地複制一個遠程分支時才有用,但不一定馬上檢查它。 否則,我現在將使用上面接受的答案 ,這在結賬說明的第一部分中詳細解釋,後面在--track的解釋下的options部分中詳細解釋,因為它是--track的。 那麼...有點類似於1-liner,因為你仍然必須首先運行git fetch <remote>

僅供參考: <refspecs> (source:destination)的順序解釋了用於刪除遠程分支的奇怪的Git-1.7前方法。 IE:將任何東西都壓入目的地refspec。


如果您試圖“簽出”一個新的遠程分支(只存在於遠程,但不在本地),以下是您需要的東西:

git fetch origin
git checkout --track origin/<remote_branch_name>

這假定你想從原點獲取。 如果不是,請用您的遠程名稱替換原點


git branch <name> --track origin/<name>


如果您有一個使用--depth 1克隆的存儲庫,那麼列出的許多命令將不起作用。 例如在這裡看到

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

在這種情況下,我會reclone回購,但也許有其他技術,例如git淺克隆(克隆 - 深度)錯過遠程分支


你使用'git pull'來保持你的分支。 因為'lbranch'和'rbranch'很難破譯,所以我將使用實際的回購和分支名稱來提供幫助。

讓我們使用:

  • myteam.unfuddle.com =遠程git服務器
  • tlc =不存在回購存在的項目賬戶
  • daves_branch =遠程分支名稱

    無論您有多少分支機構,您或任何同事都可以運行此操作來僅將您的分支拉出來:

    git init
    git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    


  • 您也可以一次獲取並簽出遠程分支: -

    git fetch && git checkout the-branch-name
    

    使用git branch -a (本地和遠程分支)或git branch -r (僅遠程分支)查看所有遠程和它們的分支。 然後,您可以執行git checkout -t remotes/repo/branch到遠程並創建本地分支。

    還有一個git ls-remote命令可以查看該遠程的所有參考和標籤。


    試試吧

    $ git pull origin your_branch_name


    最簡單的方法來做到這一點,至少對我而言:

    git fetch origin <branchName>
    

    如果你已經知道你的遠程分支是這樣的...

    git remote
    => One
    => Two
    

    並且您知道您希望結賬的分行名稱。 br1.2.3.4然後做

    git fetch One
    => returns all meta data of remote i.e. the branch name in question.
    

    剩下的就是結賬分行

    git checkout br.1.2.3.4
    

    然後製作任何新的分支。


    步驟如下:

    1. git fetch origingit fetch --all ,這會將所有遠程分支提取到本地,然後這是您可以使用的第二個選項。

    2. git checkout --track origin/<The_remote_branch you want to switch over>

    然後在這個分支上工作,你可以通過輸入來驗證你是否在該分支上

    git branch
    

    它顯示你當前所在的分支。


    假設你的遠程是[email protected],並且你想要它的random_branch分支。 該過程應如下所示:

    1. 首先檢查您的遙控器清單

      git remote -v

    2. 如果您在上述命令的輸出中沒有[email protected]遠程程序,則可以將其添加

      git remote add xyz [email protected]

    3. 現在你可以通過獲取那個遠程的內容

      git fetch xyz

    4. 現在檢出該遠程的分支

      git checkout -b my_copy_random_branch xyz/random_branch

    5. 通過檢查分支列表

      git branch -a

    本地分支my_copy_random_branch將跟踪遠程的random_branch分支。


    一個簡單的命令 - “git checkout remote_branch_name”將幫助您創建一個本地分支,其中包含遠程分支中的所有更改。


    git fetch && git checkout <your friend's branch name>應該做的


    git fetch
    
    git branch -r
    
    git checkout <branch_name>
    

    有了這個簡單的命令:

    git checkout -b 'your_branch' origin/'remote branch'
    

    我也在努力解決這個問題。事實上,我在谷歌搜索完全相同的問題。閱讀所有這些答案終於在我腦海中畫了一幅畫,我決定嘗試著看看2個存儲庫的狀態和1個沙盒以及隨著時間的推移執行的操作,同時觀看它們的版本。所以這就是我想出來的。如果我搞砸了,請糾正我。

    三個回購與取:

    ---------------------     -----------------------     -----------------------
    - Remote Repo       -     - Remote Repo         -     - Remote Repo         -
    -                   -     - gets pushed         -     -                     -
    - @ R01             -     - @ R02               -     - @ R02               -
    ---------------------     -----------------------     -----------------------
    
    ---------------------     -----------------------     -----------------------
    - Local Repo        -     - Local Repo          -     - Local Repo          -
    - pull              -     -                     -     - fetch               -
    - @ R01             -     - @ R01               -     - @ R02               -
    ---------------------     -----------------------     -----------------------
    
    ---------------------     -----------------------     -----------------------
    - Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
    - Checkout          -     - new work done       -     -                     -
    - @ R01             -     - @ R01+              -     - @R01+               -
    ---------------------     -----------------------     -----------------------
    

    拉三個回購

    ---------------------     -----------------------     -----------------------
    - Remote Repo       -     - Remote Repo         -     - Remote Repo         -
    -                   -     - gets pushed         -     -                     -
    - @ R01             -     - @ R02               -     - @ R02               -
    ---------------------     -----------------------     -----------------------
    
    ---------------------     -----------------------     -----------------------
    - Local Repo        -     - Local Repo          -     - Local Repo          -
    - pull              -     -                     -     - pull                -
    - @ R01             -     - @ R01               -     - @ R02               -
    ---------------------     -----------------------     -----------------------
    
    ---------------------     -----------------------     -----------------------
    - Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
    - Checkout          -     - new work done       -     - merged with R02     -
    - @ R01             -     - @ R01+              -     - @R02+               -
    ---------------------     -----------------------     -----------------------
    

    這有助於我理解為什麼抓取非常重要。







    git branch git-branch git-fetch