branch branch切換 - 讓現有的Git分支跟踪一個遠程分支?




remote switch (17)

很短的

git branch --set-upstream yourLocalBranchName origin/develop

這將使yourLocalBranchName跟踪名為develop的遠程分支。

我知道如何創建一個跟踪遠程分支的新分支,但是如何使現有分支跟踪遠程分支?

我知道我可以編輯.git/config文件,但似乎應該有一個更簡單的方法。


實際上,對於已接受的工作答案:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa

我以一種有點相關的方式嘗試將遠程跟踪分支添加到現有分支,但是無法訪問我想在其上添加遠程跟踪分支的系統上的遠程存儲庫(因為我經常導出此副本通過sneakernet回復到另一個可以推送到該遙控器的系統。 我發現沒有辦法強制在尚未獲取的本地上添加遠程分支(因此本地不知道遠程上存在分支,我會得到錯誤: the requested upstream branch 'origin/remotebranchname' does not exist )。

最後,我設法通過在.git/refs/remotes/origin/remotebranchname添加一個新的頭文件來添加新的,以前未知的遠程分支(沒有提取),然後復制ref(眼球是最快的,跛腳原樣; - )從可以訪問原始倉庫的系統到工作站(使用我在其中添加遠程分支的本地倉庫)。

一旦完成,我就可以使用git branch --set-upstream-to=origin/remotebranchname


我這樣做是為了使用-u選項推送的副作用

$ git push -u origin branch-name

等效的長選項是--set-upstream

git-branch命令也理解--set-upstream ,但它的使用可能令人困惑。 版本1.8.0修改了界面。

git branch --set-upstream已棄用,可能會在相對較遠的將來刪除。 git branch [-u|--set-upstream-to]已經引入了一個更健全的參數順序。

...

很有可能說git branch --set-upstream origin/master ,但是它告訴Git安排本地分支“origin / master”與當前簽出的分支集成,這很不可能是用戶的意思。 該選項已棄用; 使用新的--set-upstream-to (使用short-and-sweet -u )選項。

假設您有一個本地foo分支,並希望它以與其上游相同的名稱處理分支。 用這個來實現

$ git branch foo
$ git branch --set-upstream-to=origin/foo

要不就

$ git branch --set-upstream-to=origin/foo foo

您可以執行以下操作(假設您已在主服務器上簽出並希望推送到遠程分支主服務器):

如果您還沒有設置'遙控',請設置它

git remote add origin ssh://...

現在配置master來跟踪:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

並推:

git push origin master

給定一個分支foo和一個遠程upstream

從Git 1.8.0開始:

git branch -u upstream/foo

或者,如果本地分支foo不是當前分支:

git branch -u upstream/foo foo

或者,如果您想鍵入更長的命令,這些命令等同於以上兩個:

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

從Git 1.7.0開始:

git branch --set-upstream foo upstream/foo

筆記:

所有上述命令都將導致本地分支foo從遠程upstream跟踪遠程分支foo 。 不推薦使用舊的(1.7.x)語法,而採用新的(1.8+)語法。 新語法旨在更直觀,更易於記憶。

另請參閱: 為什麼我一直需要`--set-upstream`?


使用'--track'選項

  • git pull

    git checkout --track <remote-branch-name>

  • 要么:

    git fetch && git checkout <branch-name>


這也會奏效

git branch --set-upstream-to=/< remote>/< branch> < localbranch>

我相信,早在Git 1.5.x你可以讓一個本地分支$BRANCH跟踪一個遠程分支origin/$BRANCH ,就像這樣。

鑑於存在$BRANCHorigin/$BRANCH ,並且您目前沒有簽出$BRANCH (如果有的話,請切換),請執行以下操作:

git branch -f --track $BRANCH origin/$BRANCH

這會重新創建$BRANCH作為跟踪分支。 儘管已經存在$BRANCH-f強制創建。 如果通常使用默認值(即git-config參數branch.autosetupmerge為true),則--track是可選的。

注意,如果origin/$BRANCH尚不存在,您可以通過將本地$BRANCH推送到遠程存儲庫來創建它:

git push origin $BRANCH

接下來是上一個命令,將本地分支推進到跟踪分支。


您可能會發現git_remote_branch工具很有用。 它提供了用於創建,發布,刪除,跟踪和重命名遠程分支的簡單命令。 一個很好的功能是你可以請求一個grb命令來解釋它將執行什麼git命令。

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch

這不是這個問題的直接答案,但我想在這裡留下一個註釋,以便在嘗試配置上游分支時可能遇到與我相同問題的任何人。

警惕push.default

對於較舊的git版本,默認值是匹配的 ,如果你有這種情況會導致非常不良的行為,例如:

本地分支“master”跟踪到origin / master

遠程分支“上游”跟踪到上游/主站

如果您在“上游”分支上嘗試“git push”,則使用push.default匹配 git會自動嘗試將本地分支“master”合併為“upstream / master”,從而導致大量混亂。

這樣可以提供更明智的行為:

git config --global push.default upstream


編輯.git/config可能是最簡單,最快捷的方式。 無論如何,這就是處理遠程分支的Git命令正在做的事情。

如果您不想手工處理文件(並且這並不難),您可以隨時使用git config來執行此操作......但是,這只是編輯.git/config文件,無論如何。

當然,有一些方法可以在使用git checkout時自動跟踪遠程分支(例如,通過傳遞--track標誌),但這些命令適用於分支,而不是現有分支。


確保你運行:

git config push.default tracking

能夠推動無故障


對於1.6.x,可以使用git_remote_branch工具完成:

grb track foo upstream

這將導致Git使foo跟踪upstream/foo


1-使用以下命令更新本地元數據: git fetch --all

2-使用: git branch -a顯示您的遠程和本地分支,請參閱以下屏幕截圖

3-切換到目標分支,即要與遠程鏈接:使用

git checkout branchName

例子:

4-使用以下方法將本地分支鏈接到遠程分支:

git branch --set-upstream-to nameOfRemoteBranch

注意: nameOfRemoteBranch :從步驟2“git branch -r”的輸出中復制

使用示例:


在這裡,使用githubgit version 2.1.4 ,只需:

$ git clone [email protected]:user/repo.git

而且遙控器來自itelsef,即使沒有在本地鏈接:

$ git remote show origin

* remote origin
  Fetch URL: [email protected]:user/repo.git
  Push  URL: [email protected]:user/repo.git
  HEAD branch: master
  Remote branches:
    develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

但當然,仍然沒有本地分支:

$ git branch
* master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

看到? 現在,如果您只是結帳develp,它將自動執行魔術:

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

太簡單!

摘要。 只需運行以下兩個命令:

$ git clone [email protected]:user/repo.git
$ git checkout develop

如果要更改當前分支的名稱,請運行:

git branch -m [old_branch] [new_branch]

如果要刪除舊的遠程分支,請運行:

git push origin :[old_branch]

如果要刪除舊的遠程分支並創建新的遠程分支,請運行:

git push origin :old_branch new_branch




git branch git-branch