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

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

我要求停止跟踪,因为在具体情况下,我想删除本地分支,但不是远程分支。 删除本地和删除远程将删除远程分支以及:

  • 如何在本地和GitHub中删除Git分支?

我可以只是做git branch -d the_branch ,它不会传播时,我后来git push

如果我运行git push origin :the_branch稍后会传播吗?

在Yoshua Wuyts的回答中提到,使用git branch

 git branch --unset-upstream 

其他选项:

您不必删除您的本地分支。

只需删除您的远程追踪分支:

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

(这不会删除远程回购的分支 !)

请参阅“ 了解git-fetch ”

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

正如Dobes Vandermeer的回答中所提到的,您还需要重置与本地分支关联的configuration:

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

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

(git 1.8+,2012年10月, CarlosMartínNieto ( carlosmn ) 提交的b84869e )

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

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

 $ git branch --unset-upstream 

这适用于Git v.1.8.0或更新版本。 (来源: 1.7.9裁判 , 1.8.0裁判 )

资源

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

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

如果不需要,可以select删除本地分支。

 git branch -d <branch> 

这不会删除远程分支。

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

test1分支节中删除行merge = refs/heads/test1

您可以使用删除远程追踪分支

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

正如VonC上面提到的那样。 但是,如果你保留你的分支的本地副本, git push 仍然会尝试推送该分支 (这可能会给你一个非快进错误, 就像它的ruffin一样 )。 这是因为configurationpush.default默认为matching ,这意味着:

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

(请参阅push.default下的push.default

由于这可能不是你想要删除远程跟踪分支时,你可以设置push.default upstream (或tracking如果你有git <1.7.4.3)

上游 – 推动当前分支上游分支。

运用

 git config push.default upstream 

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

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

这不是问题的答案,但我无法弄清楚如何在上面的评论中得到体面的代码格式…所以自动降低声誉 – 这是我的评论。

我有@Dobes在我的.gitconfig的一个奇特的shmancy [别名]条目submtted配方:

 # 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 

这是一个单行程序,用于删除所有匹配模式的远程追踪分支:

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

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

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