你如何停止跟踪Git中的远程分支?

时间:2010-06-15 15:06:33

标签: git branch git-track

如何停止跟踪Git中的远程分支?

我要求停止跟踪,因为在我的具体情况下,我想删除本地分支,但不是远程分支。删除本地删除并将删除推送到远程也将删除远程分支:

我可以git branch -d the_branch这么做吗,我迟到git push时不会宣传它?

如果我稍后运行git push origin :the_branch,它是否会传播?

10 个答案:

答案 0 :(得分:587)

Yoshua Wuyts'answer中所述,使用git branch

git branch --unset-upstream

其他选项:

您不必删除本地分支。

只需删除跟踪远程分支的本地分支:

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

-r, --remotes告诉git删除远程跟踪分支(即删除分支集以跟踪远程分支)。这will not delete the branch on the remote repo

请参阅“Having a hard time understanding git-fetch

  

没有本地跟踪分支的概念,只有远程跟踪分支   因此origin/mastermaster repo中origin的远程跟踪分支

正如Dobes Vandermeeranswer中所述,您还需要重置与本地分支相关联的配置:

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

删除<branchname>的上游信息   如果未指定分支,则默认为当前分支。

(git 1.8 +,2012年10月,commit b84869e Carlos Martín Nieto (carlosmn)

这将使任何推/拉完全不知道origin/<remote branch name>

答案 1 :(得分:172)

要删除当前分支的上游,请执行以下操作:

$ git branch --unset-upstream

这适用于Git v.1.8.0或更高版本。 (来源:1.7.9 ref1.8.0 ref

source

答案 2 :(得分:106)

删除本地和远程分支运行之间的关联:

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

如果您不需要,可以选择删除本地分支:

git branch -d <branch>

这不会删除远程分支。

答案 3 :(得分:32)

最简单的方法是修改.git/config

这是一个示例文件

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        url = git@example.com:repo-name
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "test1"]
        remote = origin
        merge = refs/heads/test1
[branch "master"]
        remote = origin
        merge = refs/heads/master

删除merge = refs/heads/test1分部

中的行test1

答案 4 :(得分:9)

您可以使用

删除远程跟踪分支
git branch -d -r origin/<remote branch name>
正如VonC上面提到的那样。但是,如果您保留分支的本地副本,git push 仍会尝试推送该分支(这可能会给您一个非快进错误as it did for ruffin)。这是因为配置push.default默认为matching,这意味着:

  

匹配 - 推送所有匹配的分支。两端具有相同名称的所有分支都被认为是匹配的。这是默认值。

(请参阅push.default下的http://git-scm.com/docs/git-config

当您删除远程跟踪分支时,可能不是您想要的,您可以将push.default设置为upstream(或tracking,如果您有git&lt; 1.7。 4.3)

  

上游 - 将当前分支推送到其上游分支。

使用

git config push.default upstream

并且git将停止尝试推送已经“停止跟踪”的分支。

注意:更简单的解决方案是将本地分支重命名为其他分支。这也将消除一些混淆的可能性。

答案 5 :(得分:3)

这是一个删除与模式匹配的远程跟踪分支的单行:

git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)

答案 6 :(得分:1)

这不是问题的答案,但我无法弄清楚如何在上面的评论中得到合适的代码格式......所以自动降低声誉在这里是该死的我的评价。

我在@gobconfig的一个花哨的shmancy [别名]条目中提供了由@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

答案 7 :(得分:-1)

git branch --unset-upstream停止跟踪所有本地分支,这是不希望的。

[branch "branch-name"]文件中删除.git/config部分,然后删除

git branch -D 'branch-name' && git branch -D -r 'origin/branch-name'

为我量身定做。

答案 8 :(得分:-1)

您可以使用这种方式删除远程分支

git remote remove <your remote branch name>

答案 9 :(得分:-2)

最简单的方法是远程删除分支,然后使用:

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