如 Yoshua Wuyts' answer 中所述,使用 git branch
:
git branch --unset-upstream
其他选项:
您不必删除本地分支。
只需删除正在跟踪远程分支的本地分支:
git branch -d -r origin/<remote branch name>
-r, --remotes
告诉 git 删除远程跟踪分支(即删除分支集以跟踪远程分支)。这个will not delete the branch on the remote repo!
请参阅“Having a hard time understanding git-fetch”
没有本地跟踪分支的概念,只有远程跟踪分支。所以 origin/master 是原始仓库中 master 的远程跟踪分支
如 Dobes Vandermeer 的 answer 所述,您还需要重置与 local 分支关联的配置:
git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge
删除
(git 1.8+,2012 年 10 月,commit b84869e by Carlos Martín Nieto (carlosmn
))
这将使任何推/拉完全不知道 origin/<remote branch name>
。
要删除当前分支的上游,请执行以下操作:
$ git branch --unset-upstream
这适用于 Git v.1.8.0 或更高版本。 (来源:1.7.9 ref、1.8.0 ref)
git branch --unset-upstream [branchname]
fatal: 'origin/master' does not appear to be a git repository fatal: Could not read from remote repository.
git branch -vv
要删除本地和远程分支之间的关联,请运行:
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
更改此“拉出所有分支”行为。 More on push.default
here。
最简单的方法是编辑 .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/config
也可用。
您可以使用删除远程跟踪分支
git branch -d -r origin/<remote branch name>
正如上面提到的VonC。但是,如果您保留分支的本地副本,git push
仍会尝试推送该分支(这可能会给您带来非快进错误 as it did for ruffin)。这是因为配置 push.default
默认为 matching
,这意味着:
匹配 - 推送所有匹配的分支。在两端具有相同名称的所有分支都被认为是匹配的。这是默认设置。
(参见 push.default
下的 http://git-scm.com/docs/git-config)
当您删除远程跟踪分支时,看到这可能不是您想要的,您可以将 push.default
设置为 upstream
(或 tracking
,如果您有 git < 1.7.4.3)
upstream - 将当前分支推送到其上游分支。
使用
git config push.default upstream
并且 git 将停止尝试推送您“停止跟踪”的分支。
注意:更简单的解决方案是将本地分支重命名为其他名称。这也将消除一些混乱的可能性。
本地跟踪分支
如果您谈论的是配置为来自上游 [远程分支] 的 push
-to 和 pull
-的本地分支(例如 main
、dev
),那么您可以使用以下命令禁用它:
❯ git branch --unset-upstream <LOCALBRANCH>
例如:
❯ git branch --unset-upstream dev
❯ git branch --unset-upstream feature-x
远程跟踪分支
如果您正在谈论在您的 git log
(和 .git/refs/remotes/<REMOTE>/
目录)中显示的名称为 <REMOTE>/<BRANCH>
的分支(例如 origin/main
、origin/dev
),并显示远程分支的状态,那么您可以通过用您自己的新自定义列表覆盖当前持有的远程跟踪分支列表来停止“跟踪”(更新):
❯ git remote set-branches <REMOTE> [<REMOTE-BRANCH> …]
此外,如果您不想再在 git log
(和 .git/refs/remotes/<REMOTE>/
目录)中看到这些远程跟踪分支,则可以使用以下命令删除它们:
❯ git branch --delete --remotes -- <REMOTE>/<BRANCH>
Deleted remote-tracking branch <REMOTE>/<BRANCH> (was 1f1a655).
例如:
# keep tracking `origin/main`, and `origin/dev`,
# untrack all other `origin/*` remote branches
❯ git remote set-branches origin main dev
# delete remote branches previously tracked, from the
# `.git/refs/remotes/<REMOTE>/` directory
❯ git branch --delete --remotes -- origin/feature-x origin/feature-y
❯ git branch --delete --remotes -- origin/hotfix-z
陈旧的远程分支
最后,如果已经从远程存储库本身中删除了远程分支(已经过时),并且您想要更新本地存储库以反映这一点,那么您可以通过删除(修剪)它们:
# automatically
❯ git remote prune <REMOTE>
Pruning <REMOTE>
URL: <REMOTEURL>
* [pruned] <REMOTE>/<BRANCH>
...或者
# manually
❯ git branch --delete --remotes -- <REMOTE>/<BRANCH>
Deleted remote-tracking branch <REMOTE>/<BRANCH> (was 1f1a655).
附言
您可以通过以下方式检查跟踪状态:
❯ git remote show <REMOTE>
例如:
❯ git remote show origin
* remote origin
Fetch URL: /Users/johndoe/bare-remote
Push URL: /Users/johndoe/bare-remote
HEAD branch: ant
Remote branches:
brooms tracked
bull tracked
cat tracked
deer tracked
dog tracked
foxy tracked
john tracked
master tracked
new tracked
tim tracked
timothy tracked
Local branches configured for 'git pull':
ant merges with remote ant
master merges with remote master
Local refs configured for 'git push':
ant pushes to ant (up to date)
master pushes to master (up to date)
git-remote(1): set-branches: 更改指定远程跟踪的分支列表。这可用于在远程初始设置后跟踪可用远程分支的子集。 prune:删除与 .默认情况下,旧的远程跟踪分支会被删除,但根据全局配置和远程配置,我们甚至可能会修剪尚未推送到那里的本地标签。显示:提供有关遥控器的一些信息。 git-branch(1): --unset-upstream: 移除 . --delete:删除一个分支。 --remotes:列出或删除(如果与 -d 一起使用)远程跟踪分支。
这是一个删除所有匹配模式的远程跟踪分支的单行代码:
git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)
git branch -r -D $(git branch -r | grep -v "master")
这不是问题的答案,但我无法弄清楚如何在上面的评论中获得体面的代码格式......所以我的评论是自动降低声誉。
我在我的 .gitconfig 中的一个花哨的 shmancy [别名] 条目中有 @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)
--prune: Before fetching, remove any remote-tracking references that no longer exist on the remote.
虽然不是对原始问题的回答,但它解决了我的“如何停止在 Git 中跟踪远程分支?”的变体:如何停止在 git 中跟踪远程不再存在的远程分支。
git branch --unset-upstream
停止跟踪所有本地分支,这是不可取的。
从 .git/config
文件中删除 [branch "branch-name"]
部分,然后
git branch -D 'branch-name' && git branch -D -r 'origin/branch-name'
对我来说是最好的。
您可以使用这种方式删除您的远程分支
git remote remove <your remote branch name>
不定期副业成功案例分享
remote.<name>.fetch
refspec 配置设置来完成,但我不确定在指定 refspec 时是否可以排除分支。git branch -d -r origin/<remote branch name>
将删除一个远程跟踪分支,在您的存储库中声明为 locally。它不会删除远程仓库本身的分支(只有git push :development
会这样做)。因此,当您推送本地development
时,其历史记录不同于远程开发分支(在远程存储库上),您仍然会收到non-fast-forward
警告。