Отклоненные рефы в репо-очистке

Я очищаю запросы на вытягивание репозитория git (PR). Был создан один PR для слияния ветки B, которая позже была признана устаревшей и удалена перед слиянием. В результате ветка B была удалена, и этот PR не отображается в списке запросов на вытягивание Bitbucket. Однако, если я использую git show-ref, этот PR будет в списке ссылок, а также в истории удаленного репозитория. Есть ли способ очистить этот PR в удаленном репозитории?

master branch
|
|
|   * branch B, Pull Request
|   |
|   /
|  /
| /
|/
*
|
|

Дополнения: этот PR существует в удаленном репозитории. Я мог бы сделать голую копию на локальный и удалить локальный PR с помощью git reflog expire --expire=now --all && git gc --prune=now --aggressive, но не знаю, как удалить этот PR в удаленном репозитории.

У меня возникла эта проблема, когда я очищал историю репозитория с помощью BFG, как обсуждалось здесь. Мое нажатие локальных изменений на удаленное было отклонено из-за отклоненных ссылок (как показано ниже, а здесь связанное обсуждение этой темы)

(base) ****@*****:~/*****/abcde.git$ git push --force
Username for *****************:
Password for *****************:
Counting objects: 17811, done.
Delta compression using up to 24 threads.
Compressing objects: 100% (10604/10604), done.
Writing objects: 100% (17811/17811), 367.27 MiB | 2.16 MiB/s, done.
Total 17811 (delta 6545), reused 17811 (delta 6545)
remote: Resolving deltas: 100% (6545/6545), done.
remote: You are attempting to update refs that are reserved for Bitbucket's pull request functionality. Bitbucket manages these refs automatically, and they may not be updated by users.
remote: Rejected refs:
remote:         refs/pull-requests/2/from
remote:         refs/pull-requests/2/merge
remote:         refs/pull-requests/5/from
remote:         refs/pull-requests/5/merge
remote:

Обновления:

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

cd ~/<repo_directory/repo_name>
git remote set-url origin <bitbucket_URL>
git push --mirror

person Ken S    schedule 05.11.2020    source источник
comment
Только тот, кто фактически контролирует удаленный репозиторий, может удалить из него запрос на извлечение. Насколько я знаю, нет запроса на удаление запроса на удаление, поэтому вам придется отправить электронное письмо тому, кто его контролирует, а не сайту веб-хостинга, отправляющему электронное письмо. (Возможно, что они тоже не могут удалить его, и только администраторы битбакета могут удалить его, но это между ними и людьми, управляющими серверами битбакета.)   -  person torek    schedule 05.11.2020
comment
Я думаю, вы правы, что для удаления запросов на вытягивание нужен уровень администратора. Однако моя проблема может быть немного другой. В исходном репозитории (в моей текущей версии было проделано много работы по реструктуризации) я мог видеть PR в списке PR Bitbuket. Однако после удаления соответствующей ветки PR больше не отображается в списке PR Bitbucket.   -  person Ken S    schedule 05.11.2020


Ответы (3)


Есть ли способ очистить этот PR в удаленном репозитории?

Согласно вашему журналу,

remote: Resolving deltas: 100% (6545/6545), done.
remote: You are attempting to update refs that are reserved for Bitbucket's pull request functionality. Bitbucket manages these refs automatically, and they may not be updated by users.
remote: Rejected refs:
remote:         refs/pull-requests/2/from
remote:         refs/pull-requests/2/merge
remote:         refs/pull-requests/5/from
remote:         refs/pull-requests/5/merge

Bitbucket не позволит вам прикасаться к этим ссылкам через Git. Как их удалить — это вопрос поддержки Bitbucket. См. это обсуждение семантики, чтобы узнать, что выглядит как авторитетный фон.

person jthill    schedule 05.11.2020

Убедитесь, что вы удалили ветку, а не только PR. Если ссылка отображается на вашем локальном компьютере, вы можете запустить git fetch --prune, чтобы удалить ссылки на локальном компьютере, которых нет на вашем удаленном компьютере. Вы также можете запустить git gc для удаления потерянных объектов в качестве продолжения.

person TheGeorgeous    schedule 05.11.2020
comment
Ветку удалили, проблема в том, что PR остался в удаленном репозитории. Локально удалить этот PR не проблема. Я обновил свой пост выше. - person Ken S; 05.11.2020

Я, наконец, решил проблему с ссылкой с помощью следующей команды:

git show-ref | cut -d' ' -f2 | grep 'pull-request' | xargs -r -L1 git update-ref -d

и подтвердил очистку с помощью:

git show-ref
person Ken S    schedule 21.12.2020