如何停止在Git中跟踪远程分支?
我要求停止跟踪,因为在我的具体情况下,我想删除本地分支,而不是远程分支。删除本地分支并将其推送到远程也将删除远程分支:
我可以这样做git branch -d the_branch
,以后再也不会传播git push
吗?
它只会在git push origin :the_branch
以后运行时传播吗?
如何停止在Git中跟踪远程分支?
我要求停止跟踪,因为在我的具体情况下,我想删除本地分支,而不是远程分支。删除本地分支并将其推送到远程也将删除远程分支:
我可以这样做git branch -d the_branch
,以后再也不会传播git push
吗?
它只会在git push origin :the_branch
以后运行时传播吗?
Answers:
如Yoshua Wuyts的回答所述,使用git branch
:
git branch --unset-upstream
您不必删除本地分支。
只需删除跟踪远程分支的本地分支:
git branch -d -r origin/<remote branch name>
-r, --remotes
告诉git删除远程跟踪分支(即,删除设置为跟踪远程分支的分支)。这将不会删除该分支上的远程回购!
请参阅“ 难以理解git-fetch ”
没有本地跟踪分支的概念,只有远程跟踪分支。
所以origin/master
是一个远程跟踪分行master
的origin
回购
如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>
。
remote.<name>.fetch
配置设置来完成,但是我不确定在指定refspec时是否可以排除分支。
git branch -d -r origin/<remote branch name>
将在您的仓库中删除本地声明的远程跟踪分支。它不会删除远程仓库本身上的分支(只有a git push :development
可以这样做)。因此,当您推送development
具有与远程开发分支(在远程仓库上)不同的历史记录的local时,您仍然会收到non-fast-forward
警告。
git branch --unset-upstream [branchname]
fatal: 'origin/master' does not appear to be a git repository fatal: Could not read from remote repository.
这样做,然后尝试使用git pull origin / master
要删除本地和远程分支之间的关联,请运行:
git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge
如果不需要,可以选择在以后删除本地分支:
git branch -d <branch>
这不会删除远程分支。
git branch -d <branch>
是不是需要解除关联。
git branch -vv
您仍然会看到旧的分支,直到您这样做为止git branch -d <branch>
。
git pull
可能会抢占所有远程分支并重新添加任何它认为已“出现”在远程上的分支。您可以通过执行git config [--global] push.default simple
或更改此“拉所有分支”行为git config [--global] push.default current
。在push.default
这里更多。
最简单的方法是编辑 .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
分支部分
.git/config
也可用。
您可以使用以下方法删除远程跟踪分支
git branch -d -r origin/<remote branch name>
正如VonC上文所述。但是,如果保留分支的本地副本,git push
仍将尝试推送该分支(这可能会给您带来非快速错误,就像对ruffin一样)。这是因为配置push.default
默认为matching
:
匹配-推送所有匹配的分支。在两端具有相同名称的所有分支都被认为是匹配的。这是默认值。
(请参阅http://git-scm.com/docs/git-config下的push.default
)
看到这可能不是您删除远程跟踪分支时想要的,可以将其设置push.default
为upstream
(或者tracking
如果git <1.7.4.3)
上游-将当前分支推到其上游分支。
使用
git config push.default upstream
并且git将停止尝试推送您已“停止跟踪”的分支。
注意:更简单的解决方案是将本地分支重命名为其他名称。这也将消除一些混淆的可能性。
这不是问题的答案,但是我无法在上面的注释中弄清楚如何获得合理的代码格式...因此,我该死的是auto-down-putation-damned。
我的.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
最简单的方法是远程删除分支,然后使用:
git fetch --prune(又名git fetch -p)