问题描述
我正在清理git存储库的拉取请求(PR)。创建了一个PR以合并分支B,此分支后来在合并之前被视为不推荐使用并已删除。结果,分支B被删除,并且此PR没有出现在Bitbucket的请求请求列表中。但是,如果我使用git show-ref
,则此PR在引用列表以及远程存储库历史记录中。有没有办法清除远程存储库中的此PR?
master branch
|
|
| * branch B,Pull Request
| |
| /
| /
| /
|/
*
|
|
添加:
该PR存在于远程存储库中。我可以将裸露的副本复制到本地,并使用git reflog expire --expire=Now --all && git gc --prune=Now --aggressive
删除本地PR,但是不知道如何在远程存储库中删除此PR。
我在讨论here时使用BFG清理存储库历史记录时遇到了这个问题。我的将本地更改推送到远程的请求由于引用被拒绝而被拒绝(如下所示,这是a related discussion on this topic)
(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镜像推送到那里来绕过ref冲突问题。
cd ~/<repo_directory/repo_name>
git remote set-url origin <bitbucket_URL>
git push --mirror
解决方法
是否可以在远程存储库中清除此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支持的问题。请参阅this discussion of the semantics,以了解看起来像是权威背景。
,确保已删除分支,而不仅仅是PR。如果该引用显示在您的本地上,则可以运行git fetch --prune
来删除不在您的遥控器上的本地上的引用。您可能还需要运行git gc
来删除孤立的对象,作为后续操作。
我终于用以下命令解决了 ref 问题:
git show-ref | cut -d' ' -f2 | grep 'pull-request' | xargs -r -L1 git update-ref -d
并确认清洁:
git show-ref