如何停止跟踪Git中的远程分支?
我要求停止跟踪,因为在我的具体情况下,我想删除本地分支,但不是远程分支。删除本地分支并将删除推到remote也会删除远程分支:
如何在本地和GitHub中删除Git分支?
我能不能只做git branch -d the_branch,当我之后推送git时,它不会被传播?
如果我稍后运行git push origin:the_branch,它是否只会传播?
如何停止跟踪Git中的远程分支?
我要求停止跟踪,因为在我的具体情况下,我想删除本地分支,但不是远程分支。删除本地分支并将删除推到remote也会删除远程分支:
如何在本地和GitHub中删除Git分支?
我能不能只做git branch -d the_branch,当我之后推送git时,它不会被传播?
如果我稍后运行git push origin:the_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 --unset-upstream
这可用于Git v.1.8.0或更新版本。(来源:1.7.9 ref, 1.8.0 ref)
源
这不是问题的答案,但我不知道如何在上面的评论中获得体面的代码格式…因此,我的评论是自动降低声誉。
在我的.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
可以使用删除远程跟踪分支
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(如果git < 1.7.4.3,则设置为tracking)
上游-将当前分支推到其上游分支。
使用
git config push.default upstream
git将停止尝试推送您已经“停止跟踪”的分支。
注意:更简单的解决方案是将本地分支重命名为其他名称。这也将消除一些潜在的混乱。
Git分支——unset-upstream停止跟踪所有本地分支,这是不可取的。
从.git/config文件中删除[branch "branch-name"]段
git branch -D 'branch-name' && git branch -D -r 'origin/branch-name'
这对我来说是最好的。
最简单的方法是编辑.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行