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

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

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

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

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

8 ответов


как говорится в Yoshua Уитс' ответ, используя git branch:

git branch --unset-upstream

другие варианты:

вам не нужно удалять локальную ветку.

просто удалите ветку удаленного отслеживания:

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

(это будет не удалить ветку на удаленном РЕПО!)

в разделе "трудно понять git-fetch"

нет такой концепции локальных ветвей отслеживания, только удаленные ветви отслеживания.
Так что origin/master отделение дистанционного слежения за master на origin РЕПО

как говорится в Vandermeer Проекте Dobes ' s ответ, вам также необходимо сбросить конфигурацию, связанную с местные отрасли:

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

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

(git 1.8+, Oct. 2012, совершить b84869e by Карлос Мартин Ньето (carlosmn))

это сделает любой толчок / тянуть совершенно не зная о origin/<remote branch name>.


удалить программы для текущей ветки делать:

$ git branch --unset-upstream

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

источник


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

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

при необходимости удалите локальную ветку, если она вам не нужна:

git branch -d <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

удалить строку merge = refs/heads/test1 на test1 раздел филиала


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

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

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

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

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

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

вверх - отправка текущей ветки в вышестоящий филиал.

используя

git config push.default upstream

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

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


вот однострочный, чтобы удалить все ветви удаленного отслеживания, соответствующие шаблону:

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


это не ответ на вопрос, но я не мог понять, как получить достойное форматирование кода в комментарии выше... так что авто-вниз-репутация-будь-проклят вот мой комментарий.

у меня есть рецепт, представленный @Dobes в причудливой записи 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

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

git fetch --prune (он же git fetch-p)