代码之家  ›  专栏  ›  技术社区  ›  Jason Cohen

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

  •  454
  • Jason Cohen  · 技术社区  · 16 年前

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

    我要求停止跟踪,因为在我的具体案例中,我想删除本地分支,但不删除远程分支。删除本地分支并将删除推到远程将同时删除远程分支:

    我可以做吗? git branch -d the_branch 我以后再也不会传播了 git push ?

    它只会在我跑的时候传播吗? git push origin :the_branch 后来?

    9 回复  |  直到 7 年前
        1
  •  570
  •   balki    9 年前

    如上所述 Yoshua Wuyts answer 使用 git branch :

    git branch --unset-upstream
    

    其他选项:

    您不必删除本地分支。

    只需删除远程跟踪分支:

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

    (这个 will not delete the branch on the remote repo !)

    见“ Having a hard time understanding git-fetch

    本地跟踪分支没有这样的概念,只有远程跟踪分支。
    所以 origin/master 是的远程跟踪分支 master origin 回购协议

    如上所述 Dobes Vandermeer answer ,您还需要重置与 地方的 分支机构:

    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> .

        2
  •  167
  •   nukeguy    8 年前

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

    $ git branch --unset-upstream
    

    这适用于Git v.1.8.0或更高版本。(资料来源: 1.7.9 ref , 1.8.0 ref )

    source

        3
  •  106
  •   Alex    12 年前

    要删除本地和远程分支运行之间的关联,请执行以下操作:

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

    如果不需要本地分支,可以在以后删除它:

    git branch -d <branch>
    

    这不会删除远程分支。

        4
  •  32
  •   Jacob Groundwater    14 年前

    最简单的方法是编辑 .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 支路段

        5
  •  9
  •   Community Mohan Dere    9 年前

    可以使用删除远程跟踪分支

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

    正如VONC上面提到的。但是,如果您保留分支机构的本地副本, git push 仍然会尝试推动那个分支 (这会给你一个非快速前进的错误 as it did for ruffin )这是因为配置 push.default 默认为 matching 这意味着:

    匹配-推送所有匹配的分支。两端同名的所有分支都被认为是匹配的。这是默认设置。

    (见 http://git-scm.com/docs/git-config 在下面 默认值 )

    因为这可能不是您删除远程跟踪分支时想要的,所以您可以设置 默认值 upstream (或) tracking 如果您有Git<1.7.4.3)

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

    使用

    git config push.default upstream
    

    Git将停止尝试推送你“停止跟踪”的分支。

    注: 更简单的解决方案是将本地分支重命名为其他分支。这也将消除一些潜在的混乱。

        6
  •  3
  •   Danny Kopping    10 年前

    下面是一个删除所有匹配模式的远程跟踪分支的一行程序:

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

        7
  •  1
  •   qneill Adam Burry    10 年前

    这不是问题的答案,但我不知道如何在上面的评论中获得合适的代码格式…所以这是我的评论。

    我的.gitconfig中有@dobes在一个花哨的shmancy[别名]条目中插入了配方:

    # 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
    
        8
  •  0
  •   Bob    7 年前

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

    移除 [branch "branch-name"] 来自的节 .git/config 文件后接

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

    对我来说是最好的。

        9
  •  -2
  •   Mark Caudill    13 年前

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

    git fetch—修剪(又称git fetch-p)