你如何中止跟踪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>

相关文章
相关标签/搜索