有人接受了他們不應該有的拉請求。現在我們合併了一堆破碎的代碼。如何撤消一個請求?我只是想在合併之前恢復對提交的更改,但我注意到它合併在一堆提交中。所以現在這個人在合併之前的幾天就有這些提交。你如何解決這個問題?通過拉取請求撤消合併?
回答
有一個better answer這個問題的最後一件事,雖然我可以打破這一步一步的。
您將需要獲取和結帳,像這樣的最新上游的變化,例如:
git fetch upstream
git checkout upstream/master -b revert/john/foo_and_bar
在提交日誌以一看,你會發現一些與此類似:
commit b76a5f1f5d3b323679e466a1a1d5f93c8828b269 Merge: 9271e6e a507888 Author: Tim Tom <[email protected]> Date: Mon Apr 29 06:12:38 2013 -0700 Merge pull request #123 from john/foo_and_bar Add foo and bar commit a507888e9fcc9e08b658c0b25414d1aeb1eef45e Author: John Doe <[email protected]> Date: Mon Apr 29 12:13:29 2013 +0000 Add bar commit 470ee0f407198057d5cb1d6427bb8371eab6157e Author: John Doe <[email protected]> Date: Mon Apr 29 10:29:10 2013 +0000 Add foo
現在您想要恢復整個拉取請求,並具有稍後恢復的能力。 爲此,您需要取合併提交的ID。
在上面的例子中合併提交是最上面的一個地方說:「合併拉請求#123 ......」。
這樣做是爲了恢復兩個變化(「添加欄」和「添加富」),你會最終在一個提交回復整個拉入請求,你可以unrevert以後,保持歷史改變清潔:
git revert -m 1 b76a5f1f5d3b323679e466a1a1d5f93c8828b269
這應該是正確的答案。 git-revert手冊頁提供了git郵件列表的更多詳細信息https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge .txt –
爲什麼'git checkout upstream/master -b revert/john/foo_and_bar'?它究竟做了什麼? – Magne
@Magne - 您正在創建一個新分支來執行還原操作,然後您可以選擇合併還原的位置。基本上只是給你更多的控制如何處理分支。在我的情況中,我從這個「固定」分支提交了一個新的請求,包含返回到我們的開發分支,這意味着我的新的請求也可以在必要時恢復。這是爲了發佈我們決定推出已重新計劃的功能的初稿而完成的。沒有錯誤的代碼,只是不會在這個版本。 –
看看你的提交圖(使用gitk或類似的程序)。您將看到pull請求中的提交,並且您將看到您自己的提交以及合併提交(如果它不是快進合併)。您只需在合併之前查找自己的最後一個提交,並將分支重置爲此提交。
(如果有分支的引用日誌,它應該是更容易找到在合併之前提交。)
(編輯後的評論:)更多信息
我假設最後(最右邊)的提交是你的錯誤通過拉請求合併,它合併了這裏看到的藍線。 你最後好承諾會前的一個上黑線,這裏以紅色標記:
重置爲這個承諾,你應該罰款。
這意味着,在您的本地工作副本做到這一點(確保以後你有沒有更多的未提交的東西,例如通過git的藏匿處):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
現在確認您是真的在提交標誌着我那裏,你會看到它的血統中沒有任何東西。
git push -f origin master
(如果你的github remote被命名爲origin
- 否則更改名稱)。
現在一切都應該看起來正確的github上。提交仍然在您的存儲庫中,但任何分支都無法訪問,因此不應該在那裏造成任何傷害。 (當然,它們仍然會在RogerPaladin的存儲庫中)。
(可能存在Github特定的僅限於Web的方式,但我不太熟悉Github及其請求管理系統)
注意注意,如果其他人已經可能用錯誤的提交拉了你的主人,他們就會遇到和你現在一樣的問題,並且不能真正回饋。在重置爲新的主版本之前。
如果可能發生這種情況,或者您只是想避免任何問題,請使用git revert
命令而不是git reset
,以便使用新的提交來恢復更改,而不是將其更改爲舊的提交。 (有些人認爲你永遠不應該用已發佈的分支進行重置。)請參閱關於如何執行此操作的此問題的其他解答。
對於未來:
如果你想只有一些RogerPaladin的分公司提交的,可以考慮使用的cherry-pick
代替merge
。或與RogerPaladin溝通,將他們移動到單獨的分支併發送新的拉取請求。
若拉是他做那麼
git reset --hard HEAD~1
按照這條指示要小心,它實際上讓我回到2步,而不是一個。 – szeitlin
@szeitlin這怎麼可能發生,它把你帶回了2個步驟,而不是一個?我知道這個評論是在4年前留下的,但我很好奇,如果有人知道答案會如何發生。這對我來說非常重要。謝謝。 – Haradzieniec
我現在不記得了,但我猜如果我嘗試重置時做了新的提交,可能會發生這種情況。如果您擔心,我會用虛擬回購測試它。 – szeitlin
開始2014年6月24日,你可以嘗試輕鬆取消PR(請參閱 「Reverting a pull request」)與:
,你可以很容易地通過點擊還原恢復在GitHub上拉請求:
你會被提示創建一個還原變化的新的拉動請求:
它仍然有待測試,但如果該r evert使用-m
或不(也用於還原合併)
我一直都在使用這個地方,謝謝。
我正在尋找如何撤消拉請求,並在這裏。
我剛剛在git reset --hard
「很久以前」和 做一個快速回到我之前做拉請求的地方。
除了看這裏,我也問我的同事他會做什麼, 他有一個典型的很好的答案:使用示例輸出 第一個答案以上:
git reset --hard 9271e6e
與大多數Git中的東西,如果你這樣做並不容易, 你可能做錯了。
要撤消在整個你不想刪除提交一個github上拉的要求,你必須運行:
git reset --hard --merge <commit hash>
與提交哈希被提交前合併拉請求。這將從pull請求中移除所有提交而不影響歷史記錄中的任何提交。
一個很好的方法來發現這是去現在關閉拉請求,並發現這一領域:
運行git reset
後,運行:
git push origin --force <branch name>
這應該在拉取請求之前恢復分支,而不會影響分支中的任何提交進入commi t提取請求提交之間的歷史記錄。
編輯:
如果你點擊就拉請求恢復按鈕,這造成在樹枝上的額外承諾。它不會拒絕或取消合併。這意味着如果您要點擊回覆按鈕,則無法打開新的拉取請求來重新添加所有這些代碼。
將事情理順的好方法,無需任何瘋狂的還原或櫻桃採摘 –
謝謝!這正是我計劃要做的事情,但那大約會有大約200次提交櫻桃挑選。 – FluffySamurai
- 1. 拉取請求vs合併請求
- 2. 合併拉請求
- 3. 合併拉請求
- 4. 撤銷Gitlab中的新合併請求
- 5. 撤消由bitbucket請求創建的git合併
- 6. Git Undo撤消請求合併後的最後幾次推送,保持合併
- 7. 如何在拉取請求合併後更新拉取請求網站?
- 8. 已刪除的拉取請求在合併的拉取請求中提交
- 9. Git - 合併提交拉請求,當一切都通過github.com
- 10. 通過TFS 2008發送合併請求
- 11. Tomcat請求通過超時取消
- 12. github拉並請求與合併問題
- 13. 撤消標記爲合併
- 14. Git:如何「撤消」合併
- 15. 撤消推git的合併
- 16. GIT:如何撤消合併?
- 17. 撤消多個git合併
- 18. C#Asp.Net通過其他Web請求取消長的Web請求
- 19. 撤消壞拉
- 20. 如何避免自動合併消息發送拉請求
- 21. 如何爲合併的拉取請求獲取合併提交SHA?
- 22. 取出並簽出拉取請求
- 23. Git合併Github上的拉請求
- 24. 上拉合併提交請求
- 25. TFS2015.3 Git不會合並拉請求
- 26. 讓我Symfony的拉動請求合併
- 27. GitHub - 合併請求 - 合併
- 28. Git:拉錯了分支,然後推動合併。如何撤消?
- 29. 如何在沒有關閉拉取請求的情況下從拉取請求合併到主數據塊
- 30. Github上拉請求的自動合併而不合並氣泡
儘管接受的答案是建議,但如果回購與其他人共享,請勿強制推送到存儲庫。你冒着破壞別人已經完成的工作的風險,並且GitHub可能會繼續顯示pull請求已被合併。這個問題的另一個答案解釋了一個更安全的方法來撤消拉取請求。 – alxndr
注意:至少現在(2014年6月),GitHub在其Pull Request Web GUI中提出了「恢復」按鈕。請參閱[我的答案](http://stackoverflow.com/a/24459309/6309) – VonC
回覆按鈕的問題是,它創建一個新的提交作爲與拉請求相反的方式,這意味着如果您想要最終合併這些更改,使用「還原」按鈕可能會使這變得更加困難。 – FluffySamurai