你如何中止跟蹤Git中的遠程分支?

你如何中止跟蹤Git中的遠程分支? git

我要求中止跟蹤,由於在個人具體狀況下,我想刪除本地分支,但不是遠程分支。 刪除本地刪除並將刪除推送到遠程也將刪除遠程分支: github

我能夠只作git branch -d the_branch ,當我稍後git push時它不會被傳播嗎? post

它是否只會在我運行git push origin :the_branch傳播git push origin :the_branch稍後會怎樣? fetch


#1樓

您可使用刪除遠程跟蹤分支 spa

git branch -d -r origin/<remote branch name>

正如VonC上面提到的那樣。 可是,若是保留分支的本地副本, git push 仍會嘗試推送該分支 (這可能會給你一個非快進錯誤, 就像它爲ruffin作的那樣 )。 這是由於config push.default默認爲matching ,這意味着: .net

匹配 - 推送全部匹配的分支。 兩端具備相同名稱的全部分支都被認爲是匹配的。 這是默認值。 code

(見http://git-scm.com/docs/git-configpush.default資源

當您刪除遠程跟蹤分支時,可能不是您想要的,您能夠將push.default設置爲upstream (或者若是您有git <1.7.4.3則進行trackingrem

上游 - 將當前分支推送到其上游分支。 get

運用

git config push.default upstream

而且git將中止嘗試推送已經「中止跟蹤」的分支。

注意:更簡單的解決方案是將本地分支重命名爲其餘分支。 這也將消除一些混淆的可能性。


#2樓

最簡單的方法是遠程刪除分支,而後使用:

git fetch --prune(又名git fetch -p)


#3樓

這不是問題的答案,可是我沒法弄清楚如何在上面的評論中獲得合適的代碼格式...因此這裏的自動聲望 - 該聲明是個人評論。

我在.gitconfig中的一個花哨的shmancy [alias]條目中有@Dobes提供的配方:

# to untrack a local branch when I can't remember 'git config --unset'
cbr = "!f(){ git symbolic-ref -q HEAD 2>/dev/null | sed -e 's|refs/heads/||'; }; f"
bruntrack = "!f(){ br=${1:-`git cbr`};  \
    rm=`git config --get branch.$br.remote`; \
    tr=`git config --get branch.$br.merge`; \
    [ $rm:$tr = : ] && echo \"# untrack: not a tracking branch: $br\" && return 1; \
    git config --unset branch.$br.remote; git config --unset branch.$br.merge; \
    echo \"# untrack: branch $br no longer tracking $rm:$tr\"; return 0; }; f"

而後我就能夠跑了

$ git bruntrack branchname

#4樓

要刪除當前分支的上游,請執行如下操做:

$ git branch --unset-upstream

這適用於Git v.1.8.0或更高版本。 (資料來源: 1.7.9 ref1.8.0 ref

資源


#5樓

Yoshua Wuyts回答所述 ,使用git branch

git branch --unset-upstream

其餘選擇:

您沒必要刪除本地分支。

只需刪除跟蹤遠程分支的本地分支:

git branch -d -r origin/<remote branch name>

-r, --remotes告訴git刪除遠程跟蹤分支(即刪除分支集以跟蹤遠程分支)。 這不會刪除遠程倉庫上的分支

請參閱「 很難理解git-fetch

沒有本地跟蹤分支的概念,只有遠程跟蹤分支。
因此origin/master是一個遠程跟蹤分支masterorigin回購

正如Dobes Vandermeer回答中所提到的,您還須要重置與本地分支關聯的配置:

git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge

刪除<branchname>的上游信息。
若是未指定分支,則默認爲當前分支。

(git 1.8 +,2012年10月,由CarlosMartínNieto 承諾b84869e carlosmn

這將使任何推/拉徹底不知道origin/<remote branch name>

相關文章
相關標籤/搜索