Как остановить отслеживание удаленной ветки в 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)