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

Jas*_*hen 504 git branch git-track

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

我要求停止跟踪,因为在我的具体情况下,我想删除本地分支,但不是远程分支.删除本地删除并将删除推送到远程也将删除远程分支:

我可以这么做吗git branch -d the_branch,以后我不会传播它git push吗?

如果我git push origin :the_branch以后再跑,它会传播吗?

Von*_*onC 644

Yoshua Wuyts回答所述,使用git branch:

git branch --unset-upstream
Run Code Online (Sandbox Code Playgroud)

其他选择:

您不必删除本地分支.

只需删除远程跟踪分支:

git branch -d -r origin/<remote branch name>
Run Code Online (Sandbox Code Playgroud)

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

请参阅" 很难理解git-fetch "

没有本地跟踪分支的概念,只有远程跟踪分支.
所以-r, --remotes是一个远程跟踪分行origin/mastermaster回购

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

git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge
Run Code Online (Sandbox Code Playgroud)

删除上游信息origin.
如果未指定分支,则默认为当前分支.

(git 1.8 +,2012年10月,由CarlosMartínNieto 承诺b84869e (<branchname>))

这将使任何推/拉完全没有意识到carlosmn.

  • 在git fetch之后重新创建远程跟踪分支.是否可以排除这些? (8认同)
  • @ruffin:这是完全正常的:`git branch -d -r origin/<remote branch name>`将在你的repo中删除声明为*local*的远程跟踪分支.它将*不*删除远程repo本身的分支(只有`git push:development`会这样做).因此,当您推动本地`development`,其历史记录与远程开发分支(远程仓库)不同时,您仍然会收到"非快进"警告. (7认同)
  • @GabrielStaples 我同意。有关远程跟踪的更多信息:/sf/answers/3085701251/、/sf/answers/2674140451/ 和 /sf/answers/1983913571/ (2认同)

Yos*_*yts 185

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

$ git branch --unset-upstream
Run Code Online (Sandbox Code Playgroud)

这适用于Git v.1.8.0或更高版本.(资料来源:1.7.9 ref,1.8.0 ref)

资源

  • 应该是选择的答案. (19认同)
  • 如果您不想删除当前分支,只需:`git branch --unset-upstream [branchname]` (7认同)
  • 看起来这是新的.更多信息会很好.例如介绍的版本. (2认同)

Dob*_*eer 106

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

git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge
Run Code Online (Sandbox Code Playgroud)

如果您不需要,可以选择删除本地分支:

git branch -d <branch>
Run Code Online (Sandbox Code Playgroud)

这不会删除远程分支.

  • 删除关联时,不需要`git branch -d <branch>`. (11认同)

Jac*_*ter 32

最简单的方法是编辑 .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
Run Code Online (Sandbox Code Playgroud)

删除线merge = refs/heads/test1test1分支部分

  • fyi,这与Dobes Vandermeer的"git config --unset"解决方案相同."git config"编辑了这个文件. (5认同)
  • +1我不能肯定地说这是最简单的方法,但它肯定证明我最容易理解(并希望能够记住)! (3认同)

Akh*_*rou 22

本地跟踪分支

\n

如果您正在谈论配置为-to 和 的本地分支(例如main, )devpushpull-from 上游 [远程分支] 的

\n
\xe2\x9d\xaf git branch --unset-upstream <LOCALBRANCH>\n
Run Code Online (Sandbox Code Playgroud)\n

例如:

\n
\xe2\x9d\xaf git branch --unset-upstream dev\n\xe2\x9d\xaf git branch --unset-upstream feature-x\n
Run Code Online (Sandbox Code Playgroud)\n
\n

远程跟踪分支机构

\n

如果您正在谈论显示在您(和\n目录)中的名称分支<REMOTE>/<BRANCH>(例如origin/main, \n目录),向您显示远程分支的状态,那么您可以通过覆盖来停止“跟踪”(更新)它当前持有的远程跟踪分支列表以及您自己的新自定义列表:origin/devgit log.git/refs/remotes/<REMOTE>/

\n
\xe2\x9d\xaf git remote set-branches <REMOTE> [<REMOTE-BRANCH> \xe2\x80\xa6]\n
Run Code Online (Sandbox Code Playgroud)\n

另外,如果您不想再在您的git log(和.git/refs/remotes/<REMOTE>/目录)中看到这些远程跟踪分支,那么您可以使用以下命令删除它们:

\n
\xe2\x9d\xaf git branch --delete --remotes -- <REMOTE>/<BRANCH>\nDeleted remote-tracking branch <REMOTE>/<BRANCH> (was 1f1a655).\n
Run Code Online (Sandbox Code Playgroud)\n

例如:

\n
# keep tracking `origin/main`, and `origin/dev`,\n# untrack all other `origin/*` remote branches\n\xe2\x9d\xaf git remote set-branches origin main dev\n\n# delete remote branches previously tracked, from the\n# `.git/refs/remotes/<REMOTE>/` directory\n\xe2\x9d\xaf git branch --delete --remotes -- origin/feature-x origin/feature-y\n\xe2\x9d\xaf git branch --delete --remotes -- origin/hotfix-z\n
Run Code Online (Sandbox Code Playgroud)\n
\n

过时的远程分支

\n

最后,如果有远程分支已从远程存储库本身中删除(已变得过时),并且您想要更新本地存储库以反映这一点,那么您可以通过删除(修剪)它们:

\n
# automatically\n\xe2\x9d\xaf git remote prune <REMOTE>\nPruning <REMOTE>\nURL: <REMOTEURL>\n * [pruned] <REMOTE>/<BRANCH>\n
Run Code Online (Sandbox Code Playgroud)\n

...或者

\n
# manually\n\xe2\x9d\xaf git branch --delete --remotes -- <REMOTE>/<BRANCH>\nDeleted remote-tracking branch <REMOTE>/<BRANCH> (was 1f1a655).\n
Run Code Online (Sandbox Code Playgroud)\n
\n

聚苯乙烯

\n

您可以通过以下方式检查跟踪状态:

\n
\xe2\x9d\xaf git remote show <REMOTE>\n
Run Code Online (Sandbox Code Playgroud)\n

例如:

\n
\xe2\x9d\xaf git remote show origin\n* remote origin\n  Fetch URL: /Users/johndoe/bare-remote\n  Push  URL: /Users/johndoe/bare-remote\n  HEAD branch: ant\n  Remote branches:\n    brooms  tracked\n    bull    tracked\n    cat     tracked\n    deer    tracked\n    dog     tracked\n    foxy    tracked\n    john    tracked\n    master  tracked\n    new     tracked\n    tim     tracked\n    timothy tracked\n  Local branches configured for 'git pull':\n    ant    merges with remote ant\n    master merges with remote master\n  Local refs configured for 'git push':\n    ant    pushes to ant    (up to date)\n    master pushes to master (up to date)\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\n
    \n
  • git 远程(1):

    \n

    set-branches:\n更改指定远程跟踪的分支列表。这可用于在远程初始设置后跟踪可用远程分支的子集。

    \n

    prune:\n删除与 关联的陈旧引用。默认情况下,过时的远程跟踪分支将被删除,但根据全局配置和远程配置,我们甚至可能会删除尚未推送到那里的本地标签。

    \n

    show:\n提供有关远程的一些信息。

    \n
  • \n
  • git 分支(1):

    \n

    --unset-upstream:\n删除 的上游信息。

    \n

    --delete:\n删除一个分支。

    \n

    --remotes:\n列出或删除(如果与 -d 一起使用)远程跟踪分支。

    \n
  • \n
\n
\n


Cle*_*usW 10

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

git branch -d -r origin/<remote branch name>
Run Code Online (Sandbox Code Playgroud)

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

匹配 - 推送所有匹配的分支.两端具有相同名称的所有分支都被认为是匹配的.这是默认值.

(见http://git-scm.com/docs/git-configpush.default)

当您删除远程跟踪分支时,可能不是您想要的,您可以设置push.defaultupstream(或者tracking如果您有git <1.7.4.3)

上游 - 将当前分支推送到其上游分支.

运用

git config push.default upstream
Run Code Online (Sandbox Code Playgroud)

并且git将停止尝试推送已经"停止跟踪"的分支.

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