1

我正在清理 git 存储库的拉取请求 (PR)。创建了一个 PR 来合并分支 B,该分支后来被认为已弃用并在合并之前被删除。结果,分支 B 被删除了,并且这个 PR 没有出现在 Bitbucket 的拉取请求列表中。但是,如果我使用git show-ref,则此 PR 位于 ref 列表以及远程存储库历史记录中。有没有办法在远程存储库中清除这个 PR?

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

添加:此 PR 存在于远程存储库中。我可以将裸副本复制到本地并使用 删除本地 PR git reflog expire --expire=now --all && git gc --prune=now --aggressive,但不知道如何在远程存储库中删除此 PR。

我在使用 BFG 清理存储库历史记录时遇到了这个问题,如此所述。由于rejected refs,我对remote 的本地更改推送被拒绝(如下图,这里是关于这个主题的相关讨论

(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-conflict 问题。

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

3 回答 3

1

有没有办法在远程存储库中清除这个 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 支持的一个问题。有关看起来像权威背景的语义,请参阅此讨论。

于 2020-11-05T14:20:20.477 回答
0

确保您已删除分支,而不仅仅是 PR。如果 ref 出现在您的本地,您可以运行git fetch --prune以删除本地上不在您的远程上的 ref。您可能还希望运行git gc以删除孤立对象作为后续操作。

于 2020-11-05T04:11:29.573 回答
0

我终于用以下命令解决了 ref 问题:

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

并通过以下方式确认清洁:

git show-ref
于 2020-12-21T22:21:34.583 回答