如何停止在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/master
是origin
回购中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)