Как остановить отслеживание удаленной ветки в Git?

Как остановить отслеживание удаленной ветки в Git?

Я прошу остановить отслеживание, потому что в моем конкретном случае я хочу удалить локальную ветвь, но не удаленную. Удаление локального и нажатие удаления на удаленный удалит удаленную ветвь также:

Могу ли я просто сделать git branch -d the_branch, и он не будет распространяться, когда я позже git push?

Будет ли он распространяться только в том случае, если я буду запускать git push origin :the_branch позже?

Ответ 1

Как уже упоминалось в Yoshua Уитс ' ответ, используя git branch:

git branch --unset-upstream

Другие опции:

Вам не нужно удалять местное отделение.

Просто удалите локальную ветку, которая отслеживает удаленную ветку:

git branch -d -r origin/<remote branch name>

-r, --remotes говорит git удалить ветку удаленного отслеживания (т.е. удалить ветку, установленную для отслеживания удаленной ветки). Это не удалит ветку на удаленном репо !

Смотрите " Трудно понять git-fetch "

нет такой концепции локальных отслеживающих ветвей, только удаленные отслеживающие ветки.
Итак, origin/master - это удаленная ветка отслеживания master в репозитории origin

Как уже упоминалось в DOBES Вэндермир ответ, вы должны сбросить конфигурацию, связанную с местным отделением:

git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge

Удалите вышестоящую информацию для <branchname>.
Если ветка не указана, по умолчанию используется текущая ветка.

(git 1. 8+, октябрь 2012, коммит b84869e Карлоса Мартина Ньето (carlosmn))

Это сделает любой push/pull полностью не осведомленным о origin/<remote branch name>.

Ответ 2

Чтобы удалить восходящий поток для текущей ветки, выполните:

$ git branch --unset-upstream

Это доступно для Git v.1.8.0 или новее. (Источники: 1.7.9 ref, 1.8.0 ref)

источник

Ответ 3

Чтобы удалить связь между локальным и удаленным выполнением ветвей:

git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge

Опционально удалите локальную ветвь позже, если она вам не понадобится:

git branch -d <branch>

Это не приведет к удалению удаленной ветки.

Ответ 4

Самый простой способ - отредактировать .git/config

Вот пример файла

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        url = [email protected]: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

Ответ 5

Вы можете удалить ветвь удаленного отслеживания, используя

git branch -d -r origin/<remote branch name>

как упоминает VonC. Однако, если вы сохраните свою локальную копию ветки, git push все равно попытается нажать эту ветку (что может дать вам ошибку без перемотки вперед, как и для ruffin). Это связано с тем, что по умолчанию для config push.default matching что означает:

сопоставление - нажмите все соответствующие ветки. Все ветки с одинаковым именем на обоих концах считаются совпадающими. Это значение по умолчанию.

(см. http://git-scm.com/docs/git-config в push.default)

Поскольку это, вероятно, не то, что вы хотели, push.default ветвь удаленного отслеживания, вы можете установить push.default для upstream (или tracking если у вас есть git <1.7.4.3)

вверх - вставить текущую ветвь в свою ветвь вверх по течению.

с помощью

git config push.default upstream

и git перестанет пытаться протолкнуть ветки, которые вы "перестали отслеживать".

Примечание. Более простым решением было бы просто переименовать вашу локальную ветвь в нечто другое. Это также устранило бы некоторый потенциал для путаницы.

Ответ 6

Здесь один-liner для удаления всех ветвей удаленного отслеживания, соответствующих шаблону:

git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)

Ответ 7

Это не ответ на вопрос, но я не мог понять, как получить достойное форматирование кода в комментарии выше... так что auto-down-Reputation-be-damned здесь мой комментарий.

У меня есть рецепт, представленный @Dobes в записи fancy shmancy [alias] в моем .gitconfig:

# 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

Ответ 8

Вы можете использовать этот способ, чтобы удалить удаленную ветку

git remote remove <your remote branch name>

Ответ 9

git branch --unset-upstream останавливает отслеживание всех локальных веток, что нежелательно.

Удалите [branch "branch-name"] из файла .git/config а затем

git branch -D 'branch-name' && git branch -D -r 'origin/branch-name'

работает лучше для меня.

Ответ 10

Самый простой способ сделать это - удалить удаленную ветвь, а затем использовать:

git fetch --prune (aka git fetch -p)