簡體   English   中英

如何恢復合並到我分叉的倉庫的拉取請求,而不是合並到我的該倉庫副本

[英]How to revert a pull request that was merged to repo I forked from, instead being merged to my copy of that repo

我從回購“A”分叉。 將我的回購命名為“B”。 在本地拉下來。 做出改變,承諾,推動。 創建的拉取請求的目標是僅合並到倉庫“B”的原點/主庫,但由於它是一個分叉的倉庫,BitBucket 的默認設置將它合並到我從中分叉的倉庫“A”。

所以現在,回購“A”的主人有我的變化,不應該在那里。 他們應該最終成為我的“B”回購的主人。

BitBucket 在拉取請求上有一個“恢復”按鈕,但我收到了這條消息。 在此處輸入圖片說明

我試過“git revert -m 1 commit-hash”並收到這個錯誤.. 在此處輸入圖片說明

如何恢復該拉取請求並將 repo "A" 恢復到合並發生之前的狀態?

我看了很多答案,但沒有類似的情況。

我不知道解決方案會如此簡單。 我在此處找到的答案如何將 Git 存儲庫恢復到以前的提交? 使其僅使用兩個命令即可工作。 歷史被保留,repo A 處於合並前的相同狀態。 添加了一個新的還原提交。

假設您對 repo A 有權限這樣做,您可以重寫其master的歷史記錄並刪除所有錯誤的合並提交

例如,如果存儲庫 A 在 commit1 之前有一個干凈的歷史記錄,那么 PR 被合並,因此歷史記錄的其余部分包含來自該錯誤 PR 的提交,但也包含來自其他 PR 的“良好”提交,然后在該 repo 中:

git checkout master && git pull      # be sure to work with the latest
git rebase -i commit1

這將打開您最喜歡的編輯器,每行顯示一個提交。 刪除與“壞”提交(包括來自該 PR 的任何合並提交)相對應的所有行,並保留“好”提交。 保存並退出。

如果發生沖突(有人根據該 PR 的某些內容進行工作),您需要手動修復它,然后git rebase --continue

完成 rebase 后,您的分支歷史記錄就干凈了,就好像 PR 從未合並過一樣。 但是,在這里您需要獲得許可才能執行此操作,您需要使用git push -f origin master在遠程重新發布它,並確保將其報告給任何可能檢查過舊錯誤版本的人(他們會刪除+創建存儲庫或分支,或者如果他們實際上已經在它之上做了一些工作,他們可能無論如何都應該刪除+創建分支並使用stash或cherry-pick來重現它之上的工作)。


如果沒有“好”提交與“壞”提交混合在一起,那么解決方案就簡單得多。 例如,如果存儲庫 A 在 commit1 之前有一個干凈的歷史記錄,然后其他所有內容都是“錯誤的”,您可以將分支重置為最后一次好的提交:

git checkout master && git pull
git reset --hard commit1
git push -f origin master

同樣,您需要分支master寫權限,並警告任何可能基於它的工作的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM